From 82c1b50e2878a65d16f6c60f500392cb960b61cf Mon Sep 17 00:00:00 2001 From: Arno Cornette Date: Sun, 2 Oct 2022 08:53:10 +0200 Subject: [PATCH 1/8] feat(service): implemented matrix service --- go.mod | 8 ++-- go.sum | 39 ++++++++++++++++ service/matrix/matrix.go | 67 ++++++++++++++++++++++++++++ service/matrix/matrix_test.go | 37 +++++++++++++++ service/matrix/mock_matrix_client.go | 62 +++++++++++++++++++++++++ service/matrix/types.go | 28 ++++++++++++ 6 files changed, 238 insertions(+), 3 deletions(-) create mode 100644 service/matrix/matrix.go create mode 100644 service/matrix/matrix_test.go create mode 100644 service/matrix/mock_matrix_client.go create mode 100644 service/matrix/types.go diff --git a/go.mod b/go.mod index e1e38693..c771051e 100644 --- a/go.mod +++ b/go.mod @@ -79,17 +79,19 @@ require ( github.com/spf13/cast v1.5.0 // indirect github.com/stretchr/objx v0.4.0 // indirect github.com/technoweenie/multipartstreamer v1.0.1 // indirect - github.com/tidwall/gjson v1.14.1 // indirect + github.com/tidwall/gjson v1.14.3 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.0 // indirect + github.com/tidwall/sjson v1.2.5 // indirect github.com/ttacon/builder v0.0.0-20170518171403-c099f663e1c2 // indirect github.com/ttacon/libphonenumber v1.2.1 // indirect - golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa // indirect - golang.org/x/net v0.0.0-20220802222814-0bcc04d9c69b // indirect + golang.org/x/crypto v0.0.0-20220926161630-eccd6366d1be // indirect + golang.org/x/net v0.0.0-20220930213112-107f3e3c3b0b // indirect golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c // indirect golang.org/x/sys v0.0.0-20220803195053-6e608f9ce704 // indirect golang.org/x/text v0.3.7 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect + maunium.net/go/mautrix v0.12.1 // indirect ) diff --git a/go.sum b/go.sum index 8819df95..4cfbc912 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,4 @@ +cloud.google.com/go/compute v1.7.0 h1:v/k9Eueb8aAJ0vZuxKMrgm6kPhCLZU9HxFU+AFDs9Uk= github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f h1:2dk3eOnYllh+wUOuDhOoC2vUVoJF/5z478ryJ+wzEII= github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f/go.mod h1:4a58ifQTEe2uwwsaqbh3i2un5/CBPg+At/qHpt18Tmk= github.com/Jeffail/gabs v1.4.0 h1://5fYRRTq1edjfIrQGvdkcd22pkYUrHZ5YC/H2GJVAo= @@ -5,9 +6,13 @@ github.com/Jeffail/gabs v1.4.0/go.mod h1:6xMvQMK4k33lb7GUUpaAPh6nKMmemQeg5d4gn7/ github.com/Rhymen/go-whatsapp v0.0.0/go.mod h1:rdQr95g2C1xcOfM7QGOhza58HeI3I+tZ/bbluv7VazA= github.com/Rhymen/go-whatsapp v0.1.1 h1:OK+bCugQcr2YjyYKeDzULqCtM50TPUFM6LvQtszKfcw= github.com/Rhymen/go-whatsapp v0.1.1/go.mod h1:o7jjkvKnigfu432dMbQ/w4PH0Yp5u4Y6ysCNjUlcYCk= +github.com/Rhymen/go-whatsapp/examples/echo v0.0.0-20190325075644-cc2581bbf24d h1:m3wkrunHupL9XzzM+JZu1pgoDV1d9LFtD0gedNTHVDU= github.com/Rhymen/go-whatsapp/examples/echo v0.0.0-20190325075644-cc2581bbf24d/go.mod h1:zgCiQtBtZ4P4gFWvwl9aashsdwOcbb/EHOGRmSzM8ME= +github.com/Rhymen/go-whatsapp/examples/restoreSession v0.0.0-20190325075644-cc2581bbf24d h1:muQlzqfZxjptOBjPdv+UoxVMr8Y1rPx7VMGPJIAFc5w= github.com/Rhymen/go-whatsapp/examples/restoreSession v0.0.0-20190325075644-cc2581bbf24d/go.mod h1:5sCUSpG616ZoSJhlt9iBNI/KXBqrVLcNUJqg7J9+8pU= +github.com/Rhymen/go-whatsapp/examples/sendImage v0.0.0-20190325075644-cc2581bbf24d h1:xP//3V77YvHd1cj2Z3ttuQWAvs5WmIwBbjKe/t0g/tM= github.com/Rhymen/go-whatsapp/examples/sendImage v0.0.0-20190325075644-cc2581bbf24d/go.mod h1:RdiyhanVEGXTam+mZ3k6Y3VDCCvXYCwReOoxGozqhHw= +github.com/Rhymen/go-whatsapp/examples/sendTextMessages v0.0.0-20190325075644-cc2581bbf24d h1:IRmRE0SPMByczwE2dhnTcVojje3w2TCSKwFrboLUbDg= github.com/Rhymen/go-whatsapp/examples/sendTextMessages v0.0.0-20190325075644-cc2581bbf24d/go.mod h1:suwzklatySS3Q0+NCxCDh5hYfgXdQUWU1DNcxwAxStM= github.com/RocketChat/Rocket.Chat.Go.SDK v0.0.0-20220903135808-56c5346a1a28 h1:OJe0G++TYGhE525XnkrF9KF15D1WtQdyrk19SFwRrKk= github.com/RocketChat/Rocket.Chat.Go.SDK v0.0.0-20220903135808-56c5346a1a28/go.mod h1:rjP7sIipbZcagro/6TCk6X0ZeFT2eyudH5+fve/cbBA= @@ -55,14 +60,18 @@ github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8 github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/cschomburg/go-pushbullet v0.0.0-20171206132031-67759df45fbb h1:7X9nrm+LNWdxzQOiCjy0G51rNUxbH35IDHCjAMvogyM= github.com/cschomburg/go-pushbullet v0.0.0-20171206132031-67759df45fbb/go.mod h1:RfQ9wji3fjcSEsQ+uFCtIh3+BXgcZum8Kt3JxvzYzlk= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/deckarep/golang-set v1.7.1 h1:SCQV0S6gTtp6itiFrTqI+pfmJ4LN85S1YzhDf9rTHJQ= github.com/deckarep/golang-set v1.7.1/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= github.com/dghubble/go-twitter v0.0.0-20220816163853-8a0df96f1e6d h1:qiUGPQxwkgoeDXtYaBEioXLEHffmBsRkM/9eum0vLS4= github.com/dghubble/go-twitter v0.0.0-20220816163853-8a0df96f1e6d/go.mod h1:q7VYuSasPO79IE/QBNAMYVNlzZNy4Zr7vay6is50u5I= @@ -70,6 +79,7 @@ github.com/dghubble/oauth1 v0.7.1 h1:JjbOVSVVkms9A4h/sTQy5Jb2nFuAAVb2qVYgenJPyrE github.com/dghubble/oauth1 v0.7.1/go.mod h1:0eEzON0UY/OLACQrmnjgJjmvCGXzjBCsZqL1kWDXtF0= github.com/dghubble/sling v1.4.0 h1:/n8MRosVTthvMbwlNZgLx579OGVjUOy3GNEv5BIqAWY= github.com/dghubble/sling v1.4.0/go.mod h1:0r40aNsU9EdDUVBNhfCstAtFgutjgJGYbO1oNzkMoM8= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= @@ -89,6 +99,8 @@ github.com/go-lark/lark v1.7.3 h1:02PupA3383fc+Ym/nOhZC8g7OaYrDzXzl0zjDpgOR1k= github.com/go-lark/lark v1.7.3/go.mod h1:6ltbSztPZRT6IaO9ZIQyVaY5pVp/KeMizDYtfZkU+vM= github.com/go-redis/redis/v8 v8.11.6-0.20220405070650-99c79f7041fc h1:jZY+lpZB92nvBo2f31oPC/ivGll6NcsnEOORm8Fkr4M= github.com/go-redis/redis/v8 v8.11.6-0.20220405070650-99c79f7041fc/go.mod h1:25mL1NKxbJhB63ihiK8MnNeTRd+xAizd6bOdydrTLUQ= +github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-telegram-bot-api/telegram-bot-api v4.6.4+incompatible h1:2cauKuaELYAEARXRkq2LrJ0yDDv1rW7+wrTEdVL3uaU= github.com/go-telegram-bot-api/telegram-bot-api v4.6.4+incompatible/go.mod h1:qf9acutJ8cwBUhm1bqgz6Bei9/C/c93FPDljKWwsOgM= @@ -119,7 +131,9 @@ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= +github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/uuid v0.0.0-20171113160352-8c31c18f31ed/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= @@ -135,8 +149,11 @@ github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWm github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslCrtky5vbi9dd7HrQPQIx6wqiw= github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI= +github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639 h1:mV02weKRL81bEnm8A0HT1/CAelMQDBuQIfLw8n+d6xI= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/inconshreveable/log15 v0.0.0-20201112154412-8562bdadbbac h1:n1DqxAo4oWPMvH1+v+DLYlMCecgumhhgnxAPdqDIFHI= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= @@ -150,6 +167,7 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/kevinburke/go-types v0.0.0-20210723172823-2deba1f80ba7 h1:K8qael4LemsmJCGt+ccI8b0fCNFDttmEu3qtpFt3G0M= github.com/kevinburke/go-types v0.0.0-20210723172823-2deba1f80ba7/go.mod h1:/Pk5i/SqYdYv1cie5wGwoZ4P6TpgMi+Yf58mtJSHdOw= +github.com/kevinburke/handlers v0.0.0-20220416175136-cbf86af60bb5 h1:ZU2qnLZU/wU9pAyC/mrC+I6Ajloe93/j/hJldMnoqag= github.com/kevinburke/rest v0.0.0-20210506044642-5611499aa33c h1:hnbwWED5rIu+UaMkLR3JtnscMVGqp35lfzQwLuZAAUY= github.com/kevinburke/rest v0.0.0-20210506044642-5611499aa33c/go.mod h1:pD+iEcdAGVXld5foVN4e24zb/6fnb60tgZPZ3P/3T/I= github.com/kevinburke/twilio-go v0.0.0-20220922200631-8f3f155dfe1f h1:hfNgahMeAII8WXHg8COu6hX/TM/e5FBleh8jyiUMZNM= @@ -172,6 +190,7 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32 h1:W6apQkHrMkS0Muv8G/TipAy/FJl/rCYT0+EuS8+Z0z4= github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= @@ -182,6 +201,7 @@ github.com/onsi/ginkgo v1.14.1/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9k github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.1.3 h1:e/3Cwtogj0HA+25nMP1jCMDIf8RtRYbGwGGuBIFztkc= github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= @@ -234,17 +254,24 @@ github.com/textmagic/textmagic-rest-go-v2/v2 v2.0.4420 h1:X+WJ1bnpbuf7GLhFCpme/L github.com/textmagic/textmagic-rest-go-v2/v2 v2.0.4420/go.mod h1:PbP69y7uRiNdwtPE3/bVGDaPYA1sr4vuHaGLQAGzeW8= github.com/tidwall/gjson v1.14.1 h1:iymTbGkQBhveq21bEvAQ81I0LEBork8BFe1CUZXdyuo= github.com/tidwall/gjson v1.14.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/gjson v1.14.3 h1:9jvXn7olKEHU1S9vwoMGliaT8jq1vJ7IH/n9zD9Dnlw= +github.com/tidwall/gjson v1.14.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= +github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= github.com/ttacon/builder v0.0.0-20170518171403-c099f663e1c2 h1:5u+EJUQiosu3JFX0XS0qTf5FznsMOzTjGqavBGuCbo0= github.com/ttacon/builder v0.0.0-20170518171403-c099f663e1c2/go.mod h1:4kyMkleCiLkgY6z8gK5BkI01ChBtxR0ro3I1ZDcGM3w= github.com/ttacon/libphonenumber v1.2.1 h1:fzOfY5zUADkCkbIafAed11gL1sW+bJ26p6zWLBMElR4= github.com/ttacon/libphonenumber v1.2.1/go.mod h1:E0TpmdVMq5dyVlQ7oenAkhsLu86OkUl+yR4OAxyEg/M= github.com/utahta/go-linenotify v0.5.0 h1:E1tJaB/XhqRY/iz203FD0MaHm10DjQPOq5/Mem2A3Gs= github.com/utahta/go-linenotify v0.5.0/go.mod h1:KsvBXil2wx+ByaCR0e+IZKTbp4pDesc7yjzRigLf6pE= +github.com/yuin/goldmark v1.2.1 h1:ruQGxdhGHe7FWOJPT0mKs5+pD2Xs1Bm/kdGlHO04FmM= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= golang.org/x/crypto v0.0.0-20190131182504-b8fe1690c613/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -253,6 +280,9 @@ golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa h1:zuSxTR4o9y82ebqCUJYNGJbGPo6sKVl54f/TVDObg1c= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220926161630-eccd6366d1be h1:fmw3UbQh+nxngCAHrDCCztao/kbYFnWjoqop8dHx05A= +golang.org/x/crypto v0.0.0-20220926161630-eccd6366d1be/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20171115151908-9dfe39835686/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -268,6 +298,8 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220802222814-0bcc04d9c69b h1:3ogNYyK4oIQdIKzTu68hQrr4iuVxF3AxKl9Aj/eDrw0= golang.org/x/net v0.0.0-20220802222814-0bcc04d9c69b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20220930213112-107f3e3c3b0b h1:uKO3Js8lXGjpjdc4J3rqs0/Ex5yDKUGfk43tTYWVLas= +golang.org/x/net v0.0.0-20220930213112-107f3e3c3b0b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c h1:q3gFqPqH7NVofKo3c3yETAP//pPI+G5mvB7qqj1Y5kY= golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/sync v0.0.0-20171101214715-fd80eb99c8f6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -300,6 +332,7 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220803195053-6e608f9ce704 h1:Y7NOhdqIOU8kYI7BxsgL38d0ot0raxvcW+EMQU2QrT4= golang.org/x/sys v0.0.0-20220803195053-6e608f9ce704/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= @@ -309,13 +342,16 @@ golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e h1:4nW4NLDYnU28ojHaHO8OVxFHk/aQ33U01a9cjED+pzE= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180831171423-11092d34479b h1:lohp5blsw53GBXtLyLNaTXPXS9pJ1tiTw61ZHUoE9Qw= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -329,6 +365,7 @@ google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175 google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/h2non/gock.v1 v1.1.2 h1:jBbHXgGBK/AoPVfJh5x4r/WxIrElvbLel8TCZkkZJoY= gopkg.in/h2non/gock.v1 v1.1.2/go.mod h1:n7UGz/ckNChHiK05rDoiC4MYSunEC/lyaUm2WWaDva0= @@ -344,3 +381,5 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +maunium.net/go/mautrix v0.12.1 h1:MLfkWkpRIgUn7lueDSlPwYOeIuGF+NrAHW0hInIuVAw= +maunium.net/go/mautrix v0.12.1/go.mod h1:/jxQFIipObSsjZPH6o3xyUi8uoULz3Hfr/8p9loqpYE= diff --git a/service/matrix/matrix.go b/service/matrix/matrix.go new file mode 100644 index 00000000..483d1478 --- /dev/null +++ b/service/matrix/matrix.go @@ -0,0 +1,67 @@ +package matrix + +import ( + "context" + "errors" + matrix "maunium.net/go/mautrix" + "maunium.net/go/mautrix/event" + "maunium.net/go/mautrix/id" +) + +//go:generate mockery --name=matrixClient --output=. --case=underscore --inpackage +type matrixClient interface { + SendMessageEvent(roomID id.RoomID, eventType event.Type, contentJSON interface{}, extra ...matrix.ReqSendEvent) (resp *matrix.RespSendEvent, err error) +} + +// Compile time check to ensure that matrix.Client implements the matrixClient interface +var _ matrixClient = new(matrix.Client) + +// New returns a new instance of a Matrix notification service. +// For more information about the Matrix api specs: +// +// -> https://spec.matrix.org/v1.2/client-server-api +func New(userID id.UserID, roomID id.RoomID, homeServer, accessToken string) (*Matrix, error) { + client, err := matrix.NewClient(homeServer, userID, accessToken) + + if err != nil { + return nil, err + } + + s := &Matrix{ + client: client, + options: ServiceOptions{ + homeServer: homeServer, + accessToken: accessToken, + userID: userID, + roomID: roomID, + }, + } + return s, nil +} + +// Send takesa message body and sends them to the previously set channel. +// you will need an account, access token and roomID +// see https://matrix.org +func (s *Matrix) Send(ctx context.Context, _, message string) error { + messageBody := createMessage(message) + + select { + case <-ctx.Done(): + return ctx.Err() + default: + _, err := s.client.SendMessageEvent(s.options.roomID, event.EventMessage, &messageBody) + + if err != nil { + return errors.New("failed to send message to the room using Matrix") + } + } + return nil +} + +// createMessage is a function for the developer to construct a messagebody. +func createMessage(message string) Message { + return Message{ + Body: message, + Msgtype: event.MsgText, + } +} diff --git a/service/matrix/matrix_test.go b/service/matrix/matrix_test.go new file mode 100644 index 00000000..9b782bd5 --- /dev/null +++ b/service/matrix/matrix_test.go @@ -0,0 +1,37 @@ +package matrix + +import ( + "context" + "github.com/stretchr/testify/require" + matrix "maunium.net/go/mautrix" + "maunium.net/go/mautrix/event" + "maunium.net/go/mautrix/id" + "testing" +) + +func TestService_SetRoomID(t *testing.T) { + t.Parallel() + assert := require.New(t) + service, err := New("fake-user-id", "fake-home-server", "fake-home-server", "fake-access-token") + assert.Nil(err) + assert.NotNil(service) + assert.Equal(id.UserID("fake-user-id"), service.options.userID) + assert.Equal("fake-home-server", service.options.homeServer) + assert.Equal("fake-access-token", service.options.accessToken) +} + +func TestService_Send(t *testing.T) { + t.Parallel() + assert := require.New(t) + // Test response + mockClient := newMockMatrixClient(t) + mockClient. + On("SendMessageEvent", id.RoomID("fake-room-id"), event.EventMessage, &Message{Body: "fake-message", Msgtype: event.MsgText}).Return(&matrix.RespSendEvent{}, nil) + service, _ := New("fake-user-id", "fake-room-id", "fake-home-server", "fake-access-token") + service.client = mockClient + err := service.Send(context.Background(), "", "fake-message") + assert.Nil(err) + + mockClient.AssertExpectations(t) + +} diff --git a/service/matrix/mock_matrix_client.go b/service/matrix/mock_matrix_client.go new file mode 100644 index 00000000..2e2561cb --- /dev/null +++ b/service/matrix/mock_matrix_client.go @@ -0,0 +1,62 @@ +// Code generated by mockery v2.14.0. DO NOT EDIT. + +package matrix + +import ( + event "maunium.net/go/mautrix/event" + id "maunium.net/go/mautrix/id" + + mautrix "maunium.net/go/mautrix" + + mock "github.com/stretchr/testify/mock" +) + +// mockMatrixClient is an autogenerated mock type for the matrixClient type +type mockMatrixClient struct { + mock.Mock +} + +// SendMessageEvent provides a mock function with given fields: roomIDs, eventType, contentJSON, extra +func (_m *mockMatrixClient) SendMessageEvent(roomID id.RoomID, eventType event.Type, contentJSON interface{}, extra ...mautrix.ReqSendEvent) (*mautrix.RespSendEvent, error) { + _va := make([]interface{}, len(extra)) + for _i := range extra { + _va[_i] = extra[_i] + } + var _ca []interface{} + _ca = append(_ca, roomID, eventType, contentJSON) + _ca = append(_ca, _va...) + ret := _m.Called(_ca...) + + var r0 *mautrix.RespSendEvent + if rf, ok := ret.Get(0).(func(id.RoomID, event.Type, interface{}, ...mautrix.ReqSendEvent) *mautrix.RespSendEvent); ok { + r0 = rf(roomID, eventType, contentJSON, extra...) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*mautrix.RespSendEvent) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(id.RoomID, event.Type, interface{}, ...mautrix.ReqSendEvent) error); ok { + r1 = rf(roomID, eventType, contentJSON, extra...) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +type mockConstructorTestingTnewMockMatrixClient interface { + mock.TestingT + Cleanup(func()) +} + +// newMockMatrixClient creates a new instance of mockMatrixClient. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +func newMockMatrixClient(t mockConstructorTestingTnewMockMatrixClient) *mockMatrixClient { + mock := &mockMatrixClient{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/service/matrix/types.go b/service/matrix/types.go new file mode 100644 index 00000000..c7117dee --- /dev/null +++ b/service/matrix/types.go @@ -0,0 +1,28 @@ +package matrix + +import ( + "maunium.net/go/mautrix/event" + "maunium.net/go/mautrix/id" +) + +// ServiceOptions allow you to configure the Matrix client options. +type ServiceOptions struct { + homeServer string + accessToken string + userID id.UserID + roomID id.RoomID +} + +// Message structure that reassembles the SendMessageEvent +type Message struct { + Body string `json:"body"` + Format string `json:"format,omitempty"` + FormattedBody string `json:"formatted_body,omitempty"` + Msgtype event.MessageType `json:"msgtype"` +} + +// Matrix struct that holds necessary data to communicate with the Matrix API +type Matrix struct { + client matrixClient + options ServiceOptions +} From 3824590432a65f455a9b312c7f5177c6c7ca6a60 Mon Sep 17 00:00:00 2001 From: Arno Cornette Date: Sun, 2 Oct 2022 08:57:13 +0200 Subject: [PATCH 2/8] docs(readme): add matrix service --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6c5873f8..4a131056 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,7 @@ Yes, please! Contributions of all kinds are very welcome! Feel free to check our | [DingTalk](https://www.dingtalk.com) | [service/dinding](service/dingding) | [blinkbean/dingtalk](https://github.com/blinkbean/dingtalk) | | [Discord](https://discord.com) | [service/discord](service/discord) | [bwmarrin/discordgo](https://github.com/bwmarrin/discordgo) | | [Email](https://wikipedia.org/wiki/Email) | [service/mail](service/mail) | [jordan-wright/email](https://github.com/jordan-wright/email) | -| [Firebase Cloud Messaging](https://firebase.google.com/docs/cloud-messaging) | [service/fcm](service/fcm) | [appleboy/go-fcm](https://github.com/appleboy/go-fcm) | +| [Firebase Cloud Messaging](https://firebase.google.com/docs/cloud-messaging) | [service/fcm](service/fcm) | [appleboy/go-fcm](https://github.com/appleboy/go-fcm) | | [Lark](https://www.larksuite.com/) | [service/lark](service/lark) | [go-lark/lark](https://github.com/go-lark/lark) | | [Line](https://line.me) | [service/line](service/line) | [line/line-bot-sdk-go](https://github.com/line/line-bot-sdk-go) | | [Line Notify](https://notify-bot.line.me) | [service/line](service/line) | [utahta/go-linenotify](https://github.com/utahta/go-linenotify) | @@ -103,6 +103,7 @@ Yes, please! Contributions of all kinds are very welcome! Feel free to check our | [Twitter](https://twitter.com) | [service/twitter](service/twitter) | [dghubble/go-twitter](https://github.com/dghubble/go-twitter) | | [WeChat](https://www.wechat.com) | [service/wechat](service/wechat) | [silenceper/wechat](https://github.com/silenceper/wechat) | | [WhatsApp](https://www.whatsapp.com) | [service/whatsapp](service/whatsapp) | [Rhymen/go-whatsapp](https://github.com/Rhymen/go-whatsapp) | +| [Matrix](https://www.matrix.org) | [service/matrix](service/matrix) | [mautrix/go](https://github.com/mautrix/go) | ## Special Thanks From 3d3d28a38008f40bce6a74f0fc7b9b7540b6bcd1 Mon Sep 17 00:00:00 2001 From: Arno Cornette Date: Sun, 2 Oct 2022 16:48:06 +0200 Subject: [PATCH 3/8] chore(format) Reformatted with gofumpt --- service/matrix/matrix.go | 3 +-- service/matrix/matrix_test.go | 4 ++-- service/matrix/mock_matrix_client.go | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/service/matrix/matrix.go b/service/matrix/matrix.go index 483d1478..53f2135c 100644 --- a/service/matrix/matrix.go +++ b/service/matrix/matrix.go @@ -3,6 +3,7 @@ package matrix import ( "context" "errors" + matrix "maunium.net/go/mautrix" "maunium.net/go/mautrix/event" "maunium.net/go/mautrix/id" @@ -22,7 +23,6 @@ var _ matrixClient = new(matrix.Client) // -> https://spec.matrix.org/v1.2/client-server-api func New(userID id.UserID, roomID id.RoomID, homeServer, accessToken string) (*Matrix, error) { client, err := matrix.NewClient(homeServer, userID, accessToken) - if err != nil { return nil, err } @@ -50,7 +50,6 @@ func (s *Matrix) Send(ctx context.Context, _, message string) error { return ctx.Err() default: _, err := s.client.SendMessageEvent(s.options.roomID, event.EventMessage, &messageBody) - if err != nil { return errors.New("failed to send message to the room using Matrix") } diff --git a/service/matrix/matrix_test.go b/service/matrix/matrix_test.go index 9b782bd5..19495237 100644 --- a/service/matrix/matrix_test.go +++ b/service/matrix/matrix_test.go @@ -2,11 +2,12 @@ package matrix import ( "context" + "testing" + "github.com/stretchr/testify/require" matrix "maunium.net/go/mautrix" "maunium.net/go/mautrix/event" "maunium.net/go/mautrix/id" - "testing" ) func TestService_SetRoomID(t *testing.T) { @@ -33,5 +34,4 @@ func TestService_Send(t *testing.T) { assert.Nil(err) mockClient.AssertExpectations(t) - } diff --git a/service/matrix/mock_matrix_client.go b/service/matrix/mock_matrix_client.go index 2e2561cb..fd8c6a71 100644 --- a/service/matrix/mock_matrix_client.go +++ b/service/matrix/mock_matrix_client.go @@ -16,7 +16,7 @@ type mockMatrixClient struct { mock.Mock } -// SendMessageEvent provides a mock function with given fields: roomIDs, eventType, contentJSON, extra +// SendMessageEvent provides a mock function with given fields: roomID, eventType, contentJSON, extra func (_m *mockMatrixClient) SendMessageEvent(roomID id.RoomID, eventType event.Type, contentJSON interface{}, extra ...mautrix.ReqSendEvent) (*mautrix.RespSendEvent, error) { _va := make([]interface{}, len(extra)) for _i := range extra { From a406a1ffbf67b92e09f42360dfa19afbe359c3e3 Mon Sep 17 00:00:00 2001 From: Arno Cornette Date: Tue, 4 Oct 2022 13:17:08 +0200 Subject: [PATCH 4/8] docs(readme): updated readme and added doc --- service/matrix/README.md | 48 ++++++++++++++++++++++++++++++++++++++++ service/matrix/doc.go | 34 ++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 service/matrix/README.md create mode 100644 service/matrix/doc.go diff --git a/service/matrix/README.md b/service/matrix/README.md new file mode 100644 index 00000000..ed52f9bf --- /dev/null +++ b/service/matrix/README.md @@ -0,0 +1,48 @@ +# Matrix + +[![go.dev reference](https://img.shields.io/badge/go.dev-reference-007d9c?logo=go&logoColor=white&style=flat)](https://pkg.go.dev/github.com/nikoksr/notify/service/whatsapp) + +## Prerequisites + +You will need to following information to be able to send messages to Matrix. + +- Home server url +- User ID +- AccessToken +- Room ID + +## Usage + +In the current implementation, using this service requires 2 steps: + +1. Provide the necessary credentials explicitly +2. Use the Send message to send a message to the specified room. + +```go +package main + +import ( + "context" + "log" + + "github.com/nikoksr/notify" + "github.com/nikoksr/notify/service/matrix" +) + +func main() { + matrixSvc, err := matrix.New("user-id", "room-id", "home-server", "access-token") + if err != nil { + log.Fatalf("matrix.New() failed: %s", err.Error()) + } + + notifier := notify.New() + notifier.UseServices(matrixSvc) + + err = notifier.Send(context.Background(), "", "message") + if err != nil { + log.Fatalf("notifier.Send() failed: %s", err.Error()) + } + + log.Println("notification sent") +} +``` diff --git a/service/matrix/doc.go b/service/matrix/doc.go new file mode 100644 index 00000000..f49dc3de --- /dev/null +++ b/service/matrix/doc.go @@ -0,0 +1,34 @@ +/* +Package matrix provides message notification integration for Matrix. + +Usage: + + package main + +import ( + + "context" + "log" + "github.com/nikoksr/notify" + "github.com/nikoksr/notify/service/matrix" + +) + + func main() { + matrixSvc, err := matrix.New("user-id", "room-id", "home-server", "access-token") + if err != nil { + log.Fatalf("matrix.New() failed: %s", err.Error()) + } + + notifier := notify.New() + notifier.UseServices(matrixSvc) + + err = notifier.Send(context.Background(), "", "message") + if err != nil { + log.Fatalf("notifier.Send() failed: %s", err.Error()) + } + + log.Println("notification sent") + } +*/ +package matrix From ae11657ff2418450e57cb2bbdbb754137a2dc558 Mon Sep 17 00:00:00 2001 From: Arno Cornette Date: Tue, 4 Oct 2022 13:18:40 +0200 Subject: [PATCH 5/8] chore(rename): Rename functions to be compliant with project style --- service/matrix/matrix.go | 3 +-- service/matrix/matrix_test.go | 13 ++++++++++++- service/matrix/mock_matrix_client.go | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/service/matrix/matrix.go b/service/matrix/matrix.go index 483d1478..2ae843a8 100644 --- a/service/matrix/matrix.go +++ b/service/matrix/matrix.go @@ -39,7 +39,7 @@ func New(userID id.UserID, roomID id.RoomID, homeServer, accessToken string) (*M return s, nil } -// Send takesa message body and sends them to the previously set channel. +// Send takes a message body and sends them to the previously set channel. // you will need an account, access token and roomID // see https://matrix.org func (s *Matrix) Send(ctx context.Context, _, message string) error { @@ -58,7 +58,6 @@ func (s *Matrix) Send(ctx context.Context, _, message string) error { return nil } -// createMessage is a function for the developer to construct a messagebody. func createMessage(message string) Message { return Message{ Body: message, diff --git a/service/matrix/matrix_test.go b/service/matrix/matrix_test.go index 9b782bd5..1535d9de 100644 --- a/service/matrix/matrix_test.go +++ b/service/matrix/matrix_test.go @@ -2,6 +2,7 @@ package matrix import ( "context" + "github.com/pkg/errors" "github.com/stretchr/testify/require" matrix "maunium.net/go/mautrix" "maunium.net/go/mautrix/event" @@ -9,7 +10,7 @@ import ( "testing" ) -func TestService_SetRoomID(t *testing.T) { +func TestMatrix_New(t *testing.T) { t.Parallel() assert := require.New(t) service, err := New("fake-user-id", "fake-home-server", "fake-home-server", "fake-access-token") @@ -34,4 +35,14 @@ func TestService_Send(t *testing.T) { mockClient.AssertExpectations(t) + // Test error on Send + mockClient = newMockMatrixClient(t) + mockClient. + On("SendMessageEvent", id.RoomID("fake-room-id"), event.EventMessage, &Message{Body: "fake-message", Msgtype: event.MsgText}).Return(nil, errors.New("some-error")) + + service, _ = New("fake-user-id", "fake-room-id", "fake-home-server", "fake-access-token") + service.client = mockClient + err = service.Send(context.Background(), "", "fake-message") + assert.NotNil(err) + mockClient.AssertExpectations(t) } diff --git a/service/matrix/mock_matrix_client.go b/service/matrix/mock_matrix_client.go index 2e2561cb..fd8c6a71 100644 --- a/service/matrix/mock_matrix_client.go +++ b/service/matrix/mock_matrix_client.go @@ -16,7 +16,7 @@ type mockMatrixClient struct { mock.Mock } -// SendMessageEvent provides a mock function with given fields: roomIDs, eventType, contentJSON, extra +// SendMessageEvent provides a mock function with given fields: roomID, eventType, contentJSON, extra func (_m *mockMatrixClient) SendMessageEvent(roomID id.RoomID, eventType event.Type, contentJSON interface{}, extra ...mautrix.ReqSendEvent) (*mautrix.RespSendEvent, error) { _va := make([]interface{}, len(extra)) for _i := range extra { From 57c959c11c7596d4496ef9d4ae2bf73f36f4f014 Mon Sep 17 00:00:00 2001 From: Arno Cornette Date: Tue, 4 Oct 2022 13:21:45 +0200 Subject: [PATCH 6/8] chore(formatting): Reformatted docs --- service/matrix/doc.go | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/service/matrix/doc.go b/service/matrix/doc.go index f49dc3de..77a8afc3 100644 --- a/service/matrix/doc.go +++ b/service/matrix/doc.go @@ -1,34 +1,33 @@ /* -Package matrix provides message notification integration for Matrix. +Package matrix provides message notification integration for WhatsApp. Usage: package main -import ( + import ( + "log" - "context" - "log" - "github.com/nikoksr/notify" - "github.com/nikoksr/notify/service/matrix" + "github.com/nikoksr/notify" + "github.com/nikoksr/notify/service/matrix" + ) -) + func main() { + matrixSvc, err := matrix.New("fake-user-id", "fake-room-id", "fake-home-server", "fake-access-token") - func main() { - matrixSvc, err := matrix.New("user-id", "room-id", "home-server", "access-token") - if err != nil { - log.Fatalf("matrix.New() failed: %s", err.Error()) - } + if err != nil { + log.Fatalf("matrix.New() failed: %s", err.Error()) + } - notifier := notify.New() - notifier.UseServices(matrixSvc) + notifier := notify.New() + notifier.UseServices(matrixSvc) - err = notifier.Send(context.Background(), "", "message") - if err != nil { - log.Fatalf("notifier.Send() failed: %s", err.Error()) - } + err = notifier.Send(context.Background(), "subject", "message") + if err != nil { + log.Fatalf("notifier.Send() failed: %s", err.Error()) + } - log.Println("notification sent") - } + log.Println("notification sent") + } */ package matrix From 204d35b71842704aedbc6d68fa4f0decbe032eae Mon Sep 17 00:00:00 2001 From: Arno Cornette Date: Tue, 4 Oct 2022 16:16:38 +0200 Subject: [PATCH 7/8] docs(changes): Modified the service and path to it in the documentation. --- service/matrix/README.md | 2 +- service/matrix/doc.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/service/matrix/README.md b/service/matrix/README.md index ed52f9bf..5ae237b9 100644 --- a/service/matrix/README.md +++ b/service/matrix/README.md @@ -1,6 +1,6 @@ # Matrix -[![go.dev reference](https://img.shields.io/badge/go.dev-reference-007d9c?logo=go&logoColor=white&style=flat)](https://pkg.go.dev/github.com/nikoksr/notify/service/whatsapp) +[![go.dev reference](https://img.shields.io/badge/go.dev-reference-007d9c?logo=go&logoColor=white&style=flat)](https://pkg.go.dev/github.com/nikoksr/notify/service/matrix) ## Prerequisites diff --git a/service/matrix/doc.go b/service/matrix/doc.go index 77a8afc3..cf60103b 100644 --- a/service/matrix/doc.go +++ b/service/matrix/doc.go @@ -1,5 +1,5 @@ /* -Package matrix provides message notification integration for WhatsApp. +Package matrix provides message notification integration for Matrix. Usage: From 301a518074e8729cf27df05a40b5d2afb2b6545e Mon Sep 17 00:00:00 2001 From: Arno Cornette Date: Tue, 4 Oct 2022 16:43:06 +0200 Subject: [PATCH 8/8] chore(format): Reformated with Gofump --- service/matrix/matrix_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/service/matrix/matrix_test.go b/service/matrix/matrix_test.go index 1535d9de..d0798d94 100644 --- a/service/matrix/matrix_test.go +++ b/service/matrix/matrix_test.go @@ -2,12 +2,13 @@ package matrix import ( "context" + "testing" + "github.com/pkg/errors" "github.com/stretchr/testify/require" matrix "maunium.net/go/mautrix" "maunium.net/go/mautrix/event" "maunium.net/go/mautrix/id" - "testing" ) func TestMatrix_New(t *testing.T) {