From 0a3c44e1b471a24b98dc859b23bacffe1427dab7 Mon Sep 17 00:00:00 2001 From: Martin Dosch Date: Sun, 7 Aug 2022 16:59:29 +0200 Subject: [PATCH] Merge master. --- .gitlab-ci.yml | 12 ++++---- CHANGELOG.md | 8 +++++- README.md | 9 +++--- const.go | 1 + go.mod | 10 ++++--- go.sum | 28 ++++++++++++------ iqhandling.go | 35 ----------------------- main.go | 64 +++++++++++++++++++++++++----------------- man/go-sendxmpp.1 | 6 ++-- man/go-sendxmpp.1.html | 9 ++++-- man/go-sendxmpp.1.ronn | 5 +++- man/go-sendxmpp.5 | 4 +-- man/go-sendxmpp.5.html | 4 +-- man/go-sendxmpp.5.ronn | 2 +- parseconfig.go | 4 +++ 15 files changed, 106 insertions(+), 95 deletions(-) delete mode 100644 iqhandling.go diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 834d2cd..6654314 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -38,12 +38,12 @@ compile: - tags script: - echo "${CI_JOB_ID}" > CI_JOB_ID.txt - - env GOOS=linux GOARCH=amd64 go build -buildmode=pie -ldflags "-extldflags '-static'" -o $CI_PROJECT_DIR/linux-amd64/go-sendxmpp - - env GOOS=linux GOARCH=arm64 go build -buildmode=pie -ldflags "-extldflags '-static'" -o $CI_PROJECT_DIR/linux-arm64/go-sendxmpp - - env GOOS=linux GOARCH=386 go build -ldflags "-extldflags '-static'" -o $CI_PROJECT_DIR/linux-386/go-sendxmpp - - env GOOS=linux GOARCH=arm go build -ldflags "-extldflags '-static'" -o $CI_PROJECT_DIR/linux-arm/go-sendxmpp - - env GOOS=windows GOARCH=386 go build -buildmode=pie -ldflags "-extldflags '-static'" -o $CI_PROJECT_DIR/win386/go-sendxmpp.exe - - env GOOS=windows GOARCH=amd64 go build -buildmode=pie -ldflags "-extldflags '-static'" -o $CI_PROJECT_DIR/win64/go-sendxmpp.exe + - env GOOS=linux GOARCH=amd64 go build -buildmode=pie -ldflags "-s -w -extldflags '-static'" -o $CI_PROJECT_DIR/linux-amd64/go-sendxmpp + - env GOOS=linux GOARCH=arm64 go build -buildmode=pie -ldflags "-s -w -extldflags '-static'" -o $CI_PROJECT_DIR/linux-arm64/go-sendxmpp + - env GOOS=linux GOARCH=386 go build -ldflags "-s -w -extldflags '-static'" -o $CI_PROJECT_DIR/linux-386/go-sendxmpp + - env GOOS=linux GOARCH=arm go build -ldflags "-s -w -extldflags '-static'" -o $CI_PROJECT_DIR/linux-arm/go-sendxmpp + - env GOOS=windows GOARCH=386 go build -buildmode=pie -ldflags "-s -w -extldflags '-static'" -o $CI_PROJECT_DIR/win386/go-sendxmpp.exe + - env GOOS=windows GOARCH=amd64 go build -buildmode=pie -ldflags "-s -w -extldflags '-static'" -o $CI_PROJECT_DIR/win64/go-sendxmpp.exe artifacts: paths: - linux-amd64/go-sendxmpp diff --git a/CHANGELOG.md b/CHANGELOG.md index 89a118c..820b3d0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,11 +3,17 @@ ## Unreleased ### Added - Added Ox support for MUCs (not yet standardized). -======= +- Reply to `disco#info` queries. +- Send `service-unavailable` errors for all other IQs of type `get` and `set`. +- New config option and command line flag `alias` to uncouple MUC nickname/alias from resource. + ### Changed - Ox: Improve error messages for failed key requests. - Ox: Do not encrypt empty messages. - Check for empty messages. +- Always look up CNAME before doing SRV lookups (via xmppsrv v0.2.3). +- Detect CNAME loops (max. 5 CNAMEs) (via xmppsrv >= v0.2.4). +- Deprecate resource config option and command line flag. ## [v0.5.1] 2022-05-22 ### Changed diff --git a/README.md b/README.md index f81cf67..00f86df 100644 --- a/README.md +++ b/README.md @@ -73,17 +73,18 @@ setting: eval_password: ``` -You can also configure the resource (and nickname for MUCs) via the `resource` setting: +You can also configure the alias/nickname for MUCs via the `alias` setting: ``` -resource: +alias: ``` If no configuration file is present or if the values should be overridden it is possible to define the account details via command line options: ```plain -Usage: go-sendxmpp [-cdilnt] [-f value] [--help] [--http-upload value] [-j value] [-m value] [--muc-password value] [--ox] [--ox-delete-nodes] [--ox-genprivkey-rsa] [--ox-genprivkey-x25519] [--ox-import-privkey value] [--ox-passphrase value] [-p value] [--raw] [-r value] [--timeout value] [--tls-version value] [-u value] [--version] [parameters ...] +Usage: go-sendxmpp [-cdilnt] [-a value] [-f value] [--help] [--http-upload value] [-j value] [-m value] [--muc-password value] [--ox] [--ox-delete-nodes] [--ox-genprivkey-rsa] [--ox-genprivkey-x25519] [--ox-import-privkey value] [--ox-passphrase value] [-p value] [--raw] [-r value] [--timeout value] [--tls-version value] [-u value] [--version] [parameters ...] + -a, --alias=value Set alias/nicknamefor chatrooms. -c, --chatroom Send message to a chatroom. -d, --debug Show debugging info. -f, --file=value Set configuration file. (Default: @@ -120,7 +121,7 @@ Usage: go-sendxmpp [-cdilnt] [-f value] [--help] [--http-upload value] [-j value --raw Send raw XML. -r, --resource=value Set resource. When sending to a chatroom this is used as - 'alias'. + 'alias'. DEPRECATED: Use --alias instead. --timeout=value Connection timeout in seconds. [10] -t, --tls Use direct TLS. diff --git a/const.go b/const.go index 5ead1b9..84a6597 100644 --- a/const.go +++ b/const.go @@ -18,6 +18,7 @@ const ( nsOxPubKeys = "urn:xmpp:openpgp:0:public-keys" nsPubsub = "http://jabber.org/protocol/pubsub" nsPubsubOwner = "http://jabber.org/protocol/pubsub#owner" + nsXMPPStanzas = "urn:ietf:params:xml:ns:xmpp-stanzas" oxAltBody = "This message is encrypted (XEP-0373: OpenPGP for XMPP)." pubsubPubOptions = "http://jabber.org/protocol/pubsub#publish-options" ) diff --git a/go.mod b/go.mod index ec9bf58..c0814e0 100644 --- a/go.mod +++ b/go.mod @@ -8,14 +8,16 @@ require ( github.com/gabriel-vasile/mimetype v1.4.1 github.com/mattn/go-xmpp v0.0.0-20220712221724-2eb234970ce7 github.com/pborman/getopt/v2 v2.1.0 - salsa.debian.org/mdosch/xmppsrv v0.1.1 + salsa.debian.org/mdosch/xmppsrv v0.2.4-0.20220805135559-06e33f896377 ) require ( - github.com/ProtonMail/go-crypto v0.0.0-20220714114130-e85cedf506cd // indirect + github.com/ProtonMail/go-crypto v0.0.0-20220730123233-d6ffb7692adf // indirect github.com/ProtonMail/go-mime v0.0.0-20220429130430-2192574d760f // indirect + github.com/cloudflare/circl v1.2.0 // indirect github.com/pkg/errors v0.9.1 // indirect - golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d // indirect - golang.org/x/net v0.0.0-20220708220712-1185a9018129 // indirect + golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa // indirect + golang.org/x/net v0.0.0-20220805013720-a33c5aa5df48 // indirect + golang.org/x/sys v0.0.0-20220804214406-8e32c043e418 // indirect golang.org/x/text v0.3.7 // indirect ) diff --git a/go.sum b/go.sum index 4376af8..ce18cc6 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,7 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ProtonMail/go-crypto v0.0.0-20220113124808-70ae35bab23f/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= -github.com/ProtonMail/go-crypto v0.0.0-20220714114130-e85cedf506cd h1:sOpOKHLKfQtb3L4c8NMK7dsUlQU8ILQ9KHX8EWD/VVE= -github.com/ProtonMail/go-crypto v0.0.0-20220714114130-e85cedf506cd/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= +github.com/ProtonMail/go-crypto v0.0.0-20220730123233-d6ffb7692adf h1:aFFtnGZ6/2Qlvx80yxA2fFSYDQWTFjtKozQKB36A3/A= +github.com/ProtonMail/go-crypto v0.0.0-20220730123233-d6ffb7692adf/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= github.com/ProtonMail/go-mime v0.0.0-20220302105931-303f85f7fe0f/go.mod h1:NYt+V3/4rEeDuaev/zw1zCq8uqVEuPHzDPo3OZrlGJ4= github.com/ProtonMail/go-mime v0.0.0-20220429130430-2192574d760f h1:4IWzKjHzZxdrW9k4zl/qCwenOVHDbVDADPPHFLjs0Oc= github.com/ProtonMail/go-mime v0.0.0-20220429130430-2192574d760f/go.mod h1:qRZgbeASl2a9OwmsV85aWwRqic0NHPh+9ewGAzb4cgM= @@ -9,6 +9,11 @@ github.com/ProtonMail/gopenpgp/v2 v2.4.8 h1:udtI0QsLn6EOBM2zwmmTvAWaUP+3GNatkfiI github.com/ProtonMail/gopenpgp/v2 v2.4.8/go.mod h1:ZW1KxHNG6q5LMgFKf9Ap/d2eVYeyGf5+fAUEAjJWtmo= github.com/beevik/etree v1.1.0 h1:T0xke/WvNtMoCqgzPhkX2r4rjY3GDZFi+FjpRZY2Jbs= github.com/beevik/etree v1.1.0/go.mod h1:r8Aw8JqVegEf0w2fDnATrX9VpkMcyFeM0FhwO62wh+A= +github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/bwesterb/go-ristretto v1.2.1/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= +github.com/cloudflare/circl v1.2.0 h1:NheeISPSUcYftKlfrLuOo4T62FkmD4t4jviLfFFYaec= +github.com/cloudflare/circl v1.2.0/go.mod h1:Ch2UgYr6ti2KTtlejELlROl0YIYj7SLjAC8M+INXlMk= 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= @@ -33,8 +38,10 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d h1:sK3txAijHtOK88l68nt020reeT1ZdKLIYetKl95FzVY= -golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd/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/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -49,8 +56,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220708220712-1185a9018129 h1:vucSRfWwTsoXro7P+3Cjlr6flUMtzCwzlvkxEQtHHB0= -golang.org/x/net v0.0.0-20220708220712-1185a9018129/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220805013720-a33c5aa5df48 h1:N9Vc/rorQUDes6B9CNdIxAn5jODGj2wzfrei2x4wNj4= +golang.org/x/net v0.0.0-20220805013720-a33c5aa5df48/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -58,7 +65,12 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220804214406-8e32c043e418 h1:9vYwv7OjYaky/tlAeD7C4oC9EsPTlaFl1H2jS++V+ME= +golang.org/x/sys v0.0.0-20220804214406-8e32c043e418/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/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -76,5 +88,5 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -salsa.debian.org/mdosch/xmppsrv v0.1.1 h1:I/5HS+cOg27LRADQ2R4KqQY6DTVMsaPMu9ywSAMTOG8= -salsa.debian.org/mdosch/xmppsrv v0.1.1/go.mod h1:udWXnWFa9zkcyN9YSB/u44BCnnRDpeQ0eDy3MVLjHZQ= +salsa.debian.org/mdosch/xmppsrv v0.2.4-0.20220805135559-06e33f896377 h1:maVAch+h+MX09AIMCi3NAR0ifJAKmFYbZrQX06un3DI= +salsa.debian.org/mdosch/xmppsrv v0.2.4-0.20220805135559-06e33f896377/go.mod h1:udWXnWFa9zkcyN9YSB/u44BCnnRDpeQ0eDy3MVLjHZQ= diff --git a/iqhandling.go b/iqhandling.go deleted file mode 100644 index 9fbcf41..0000000 --- a/iqhandling.go +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2020 - 2021 Martin Dosch. -// Use of this source code is governed by the BSD-2-clause -// license that can be found in the LICENSE file. - -package main - -import ( - "github.com/mattn/go-xmpp" // BSD-3-Clause -) - -func sendIQ(client *xmpp.Client, iqc chan xmpp.IQ, target string, - iQtype string, content string) (xmpp.IQ, error) { - var iq xmpp.IQ - id := getID() - c := make(chan xmpp.IQ) - go getIQ(client, id, c, iqc) - _, err := client.RawInformation(client.JID(), target, id, - iQtype, content + "\n") - if err != nil { - return iq, err - } - iq = <-c - return iq, nil -} - -func getIQ(client *xmpp.Client, id string, c chan xmpp.IQ, - iqc chan xmpp.IQ) { - for { - iq := <-iqc - if iq.ID == id { - c <- iq - return - } - } -} diff --git a/main.go b/main.go index 8416fd5..6a1c7b9 100644 --- a/main.go +++ b/main.go @@ -27,23 +27,7 @@ type configuration struct { port string password string resource string -} - -func rcvStanzas(client *xmpp.Client, iqc chan xmpp.IQ, msgc chan xmpp.Chat) { - for { - received, err := client.Recv() - if err != nil { - log.Println(err) - } - switch v := received.(type) { - case xmpp.Chat: - msgc <- v - case xmpp.IQ: - iqc <- v - case xmpp.Presence: - default: - } - } + alias string } func readMessage(messageFilePath string) (string, error) { @@ -93,11 +77,11 @@ func main() { } var ( - err error - message, user, server, password, resource string - oxPrivKey *crypto.Key - recipients []recipientsType - groupchat bool + err error + message, user, server, password, resource, alias string + oxPrivKey *crypto.Key + recipients []recipientsType + groupchat bool ) // Define command line flags. @@ -110,7 +94,9 @@ func main() { flagChatroom := getopt.BoolLong("chatroom", 'c', "Send message to a chatroom.") flagDirectTLS := getopt.BoolLong("tls", 't', "Use direct TLS.") flagResource := getopt.StringLong("resource", 'r', "", "Set resource. "+ - "When sending to a chatroom this is used as 'alias'.") + "When sending to a chatroom this is used as 'alias'. DEPRECATED: Use --alias instead.") + flagAlias := getopt.StringLong("alias", 'a', "", "Set alias/nickname"+ + "for chatrooms.") flagFile := getopt.StringLong("file", 'f', "", "Set configuration file. (Default: "+ "~/.config/go-sendxmpp/sendxmpprc)") flagMessageFile := getopt.StringLong("message", 'm', "", "Set file including the message.") @@ -184,6 +170,7 @@ func main() { server = config.jserver password = config.password resource = config.resource + alias = config.alias if config.port != "" { server = net.JoinHostPort(server, fmt.Sprint(config.port)) } @@ -204,11 +191,21 @@ func main() { password = *flagPassword } - // Overwrite resource if specified via command line flag + switch { + // Use "go-sendxmpp" if no nick is specified via config or command line flag. + case alias == "" && *flagAlias == "": + alias = "go-sendxmpp" + // Overwrite configured alias if a nick is specified via command line flag. + case *flagAlias != "": + alias = *flagAlias + } + + // Overwrite resource if specified via command line flag. if *flagResource != "" { + fmt.Println("Deprecated flag: --resource.") resource = *flagResource } else if resource == "" { - // Use "go-sendxmpp" plus a random string if no other resource is specified + // Use "go-sendxmpp" plus a random string if no other resource is specified. resource = "go-sendxmpp." + getShortID() } @@ -272,7 +269,6 @@ func main() { go rcvStanzas(client, iqc, msgc) var msgType string - msgType = "chat" if *flagChatroom { msgType = "groupchat" // Join the MUCs. @@ -408,6 +404,22 @@ func main() { message = strings.ToValidUTF8(message, "") reg := regexp.MustCompile(`[\x{0000}-\x{0008}\x{000B}\x{000C}\x{000E}-\x{001F}]`) message = reg.ReplaceAllString(message, "") + if *flagChatroom { + msgType = "groupchat" + // Join the MUCs. + for _, recipient := range recipients { + if *flagMUCPassword != "" { + dummyTime := time.Now() + _, err = client.JoinProtectedMUC(recipient.Jid, alias, + *flagMUCPassword, xmpp.NoHistory, 0, &dummyTime) + } else { + _, err = client.JoinMUCNoHistory(recipient.Jid, alias) + } + if err != nil { + log.Fatal(err) + } + } + } switch { case *flagRaw: if message == "" { diff --git a/man/go-sendxmpp.1 b/man/go-sendxmpp.1 index 8e4db40..a60b13c 100644 --- a/man/go-sendxmpp.1 +++ b/man/go-sendxmpp.1 @@ -1,6 +1,6 @@ .\" generated with Ronn-NG/v0.9.1 .\" http://github.com/apjanke/ronn-ng/tree/0.9.1 -.TH "GO\-SENDXMPP" "1" "July 2022" "" +.TH "GO\-SENDXMPP" "1" "August 2022" "" .SH "NAME" \fBgo\-sendxmpp\fR \- A little tool to send messages to an XMPP contact or MUC\. .SH "SYNOPSIS" @@ -10,6 +10,8 @@ A little tool to send messages to an XMPP contact or MUC inspired by (but not as .br You can either pipe a programs output to \fBgo\-sendxmpp\fR, write in your terminal (put \fB^D\fR in a new line to finish) or send the input from a file (\fB\-m\fR or \fB\-\-message\fR)\. The account data is expected at \fB~/\.config/go\-sendxmpp/config\fR (preferred), \fB~/\.config/go\-sendxmpp/sendxmpprc\fR (deprecated) \fB~/\.sendxmpprc\fR (for compatibility with the original perl sendxmpp) if no other configuration file location is specified with \fB\-f\fR or \fB\-\-file\fR\. .SH "OPTIONS" +\fB\-a\fR, \fB\-\-alias\fR=[\fIvalue\fR]: Set alias/nicknamefor chatrooms\. +.P \fB\-c\fR, \fB\-\-chatroom\fR=[\fIvalue\fR]: Send message to a chatroom\. .P \fB\-d\fR, \fB\-\-debug\fR: Show debugging info\. @@ -56,7 +58,7 @@ If there is an existing private key for "OpenPGP for XMPP" created by another cl .P \fB\-\-raw\fR: Send raw XML\. To send raw XML to a contact as normal chat message no contact must be specified\. To send raw XML to a MUC you have to specify the MUC via \fB\-c\fR and go\-sendxmpp will join the MUC\. .P -\fB\-r\fR, \fB\-\-resource\fR=[\fIvalue\fR]: Set resource\. When sending to a chatroom this is used as 'alias'\. +\fB\-r\fR, \fB\-\-resource\fR=[\fIvalue\fR]: DEPRECATED: Set resource\. When sending to a chatroom this is used as 'alias'\. .P \fB\-\-timeout=\fR[\fIvalue\fR]: Connection timeout in seconds\. (Default: 10) .P diff --git a/man/go-sendxmpp.1.html b/man/go-sendxmpp.1.html index 34f4203..74d475c 100644 --- a/man/go-sendxmpp.1.html +++ b/man/go-sendxmpp.1.html @@ -91,6 +91,9 @@ file location is specified with -f or --file.

OPTIONS

+

-a, --alias=[value]: + Set alias/nicknamefor chatrooms.

+

-c, --chatroom=[value]: Send message to a chatroom.

@@ -174,7 +177,7 @@ file location is specified with -f or --file.

To send raw XML to a MUC you have to specify the MUC via -c and go-sendxmpp will join the MUC.

-r, --resource=[value]: - Set resource. When sending to a chatroom this is used as 'alias'.

+ DEPRECATED: Set resource. When sending to a chatroom this is used as 'alias'.

--timeout=[value]: Connection timeout in seconds. (Default: 10)

@@ -206,11 +209,11 @@ License: BSD 2-clause License

SEE ALSO

-

go-sendxmpp(5), sendxmpp(1)

+

go-sendxmpp(5), sendxmpp(1)

  1. -
  2. July 2022
  3. +
  4. August 2022
  5. go-sendxmpp(1)
diff --git a/man/go-sendxmpp.1.ronn b/man/go-sendxmpp.1.ronn index 88801c1..e0dd1d5 100644 --- a/man/go-sendxmpp.1.ronn +++ b/man/go-sendxmpp.1.ronn @@ -16,6 +16,9 @@ file location is specified with `-f` or `--file`. ## OPTIONS + `-a`, `--alias`=[]: + Set alias/nicknamefor chatrooms. + `-c`, `--chatroom`=[]: Send message to a chatroom. @@ -99,7 +102,7 @@ file location is specified with `-f` or `--file`. To send raw XML to a MUC you have to specify the MUC via `-c` and go-sendxmpp will join the MUC. `-r`, `--resource`=[]: - Set resource. When sending to a chatroom this is used as 'alias'. + DEPRECATED: Set resource. When sending to a chatroom this is used as 'alias'. `--timeout=`[]: Connection timeout in seconds. (Default: 10) diff --git a/man/go-sendxmpp.5 b/man/go-sendxmpp.5 index ac82140..e60401f 100644 --- a/man/go-sendxmpp.5 +++ b/man/go-sendxmpp.5 @@ -1,6 +1,6 @@ .\" generated with Ronn-NG/v0.9.1 .\" http://github.com/apjanke/ronn-ng/tree/0.9.1 -.TH "GO\-SENDXMPP" "5" "February 2022" "" +.TH "GO\-SENDXMPP" "5" "August 2022" "" .SH "NAME" \fBgo\-sendxmpp\fR \- A little tool to send messages to an XMPP contact or MUC\. .SH "LOCATION" @@ -16,7 +16,7 @@ password: [\fIyour_jabber_password\fR] .br eval_password: [\fIcommand_to_unlock_your_password\fR] .br -resource: [\fIyour_resource\fR] +alias: [\fIyour_alias\fR] .SH "REQUIRED SETTINGS" If all necessary settings are supplied as command line arguments no config file is needed at all\. Setting \fBjserver\fR and \fBport\fR might not be necessary depending on the used server\. .br diff --git a/man/go-sendxmpp.5.html b/man/go-sendxmpp.5.html index 0f2a697..3cab012 100644 --- a/man/go-sendxmpp.5.html +++ b/man/go-sendxmpp.5.html @@ -88,7 +88,7 @@ jserver: [jabber_server]
port: [jabber_port]
password: [your_jabber_password]
eval_password: [command_to_unlock_your_password]
-resource: [your_resource]

+alias: [your_alias]

REQUIRED SETTINGS

@@ -116,7 +116,7 @@ License: BSD 2-clause License

  1. -
  2. February 2022
  3. +
  4. August 2022
  5. go-sendxmpp(5)
diff --git a/man/go-sendxmpp.5.ronn b/man/go-sendxmpp.5.ronn index 656f879..a90dc8b 100644 --- a/man/go-sendxmpp.5.ronn +++ b/man/go-sendxmpp.5.ronn @@ -14,7 +14,7 @@ jserver: [] port: [] password: [] eval_password: [] -resource: [] +alias: [] ## REQUIRED SETTINGS diff --git a/parseconfig.go b/parseconfig.go index 87b1c8a..4ca04b4 100644 --- a/parseconfig.go +++ b/parseconfig.go @@ -7,6 +7,7 @@ package main import ( "bufio" "errors" + "fmt" "log" "os" "os/exec" @@ -120,6 +121,9 @@ func parseConfig(configPath string) (configuration, error) { output.port = row[1] case "resource:": output.resource = row[1] + fmt.Println(configPath+":", "Deprecated option: resource.") + case "alias:": + output.alias = row[1] default: if len(row) >= 2 { if strings.Contains(scanner.Text(), ";") {