go-sendxmpp

A tool to send messages or files to an XMPP contact or MUC.

BSD-2-CLAUSE License

Stars
0
Committers
5

go-sendxmpp

about

A tool to send messages to an XMPP contact or MUC inspired by sendxmpp. You can find other sendxmpp alternatives in the XSF wiki.

support

You might join the chat if you have problems, want to contribute or just want to talk about the project. You might also talk about any of the other sendxmpp incarnations. :)

requirements

  • go >= 1.21

installation

repositories including go-sendxmpp

manual installation

Latest release:

$ go install salsa.debian.org/mdosch/go-sendxmpp@latest

Current development version:

$ go install salsa.debian.org/mdosch/go-sendxmpp@master

You will find the binary in $GOPATH/bin or, if set, $GOBIN.

binaries

There are some (automatically built and untested) binaries linked to the release.

usage

You can either pipe a programs output to go-sendxmpp, write in your terminal (put ^D in a new line to finish) or send the input from a file (-m or --message).

The account data is expected at ~/.config/go-sendxmpp/config if no other configuration file location is specified with -f or --file. The configuration file is expected to be in the following format:

username: <your_jid>
password: <your_jabber_password>

If this is not sufficient to connect you might also specify jserver and port. It is also possible to use a password manager. In this case the password setting should be replaced by the eval_password setting:

eval_password: <command_to_unlock_your_password>

You can also configure the alias/nickname for MUCs via the alias setting:

alias: <my_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:

Usage: go-sendxmpp [-cdilnt] [-a value] [--fast-off] [-f value] [--headline] [--help] [-h value] [-j value] [-m value] [--muc-password value] [--oob-file value] [--ox] [--ox-delete-nodes] [--ox-genprivkey-rsa] [--ox-genprivkey-x25519] [--ox-import-privkey value] [--ox-passphrase value] [-p value] [--raw] [--scram-mech-pinning value] [--ssdp-off] [-s value] [--timeout value] [--tls-version value] [-u value] [--version] [recipients]
 -a, --alias=value  Set alias/nicknamefor chatrooms.
 -c, --chatroom     Send message to a chatroom.
 -d, --debug        Show debugging info.
     --fast-off     Disable XEP-0484: Fast Authentication Streamlining Tokens.
 -f, --file=value   Set configuration file. (Default:
                    ~/.config/go-sendxmpp/sendxmpprc)
     --headline     Send message as type headline.
     --help         Show help.
 -h, --http-upload=value
                    Send a file via http-upload.
 -i, --interactive  Interactive mode (for use with e.g. 'tail -f').
 -j, --jserver=value
                    XMPP server address.
 -l, --listen       Listen for messages and print them to stdout.
 -m, --message=value
                    Set file including the message.
     --muc-password=value
                    Password for password protected MUCs.
 -n, --no-tls-verify
                    Skip verification of TLS certificates (not recommended).
     --oob-file=value
                    URL to send a file as out of band data.
     --ox           Use "OpenPGP for XMPP" encryption (experimental).
     --ox-delete-nodes
                    Delete existing OpenPGP nodes on the server.
     --ox-genprivkey-rsa
                    Generate a private OpenPGP key (RSA 4096 bit) for the given
                    JID and publish the corresponding public key.
     --ox-genprivkey-x25519
                    Generate a private OpenPGP key (x25519) for the given JID
                    and publish the corresponding public key.
     --ox-import-privkey=value
                    Import an existing private OpenPGP key.
     --ox-passphrase=value
                    Passphrase for locking and unlocking the private OpenPGP
                    key.
 -p, --password=value
                    Password for XMPP account.
     --raw          Send raw XML.
     --scram-mech-pinning=value
                    Enforce the use of a certain SCRAM authentication mechanism.
     --ssdp-off     Disable XEP-0474: SASL SCRAM Downgrade Protection.
      -s, --subject=value
                    Set message subject.
     --timeout=value
                    Connection timeout in seconds. [10]
 -t, --tls          Use direct TLS.
     --tls-version=value
                    Minimal TLS version. 10 (TLSv1.0), 11 (TLSv1.1), 12
                    (TLSv1.2) or 13 (TLSv1.3). [12]
 -u, --username=value
                    Username for XMPP account.
     --version      Show version information.

examples

Send a message to two recipients using a configuration file.

cat message.txt|go-sendxmpp -f ./sendxmpp [email protected] [email protected]

Send a message to two recipients directly defining account credentials.

cat message.txt|go-sendxmpp -u [email protected] -p swordfish [email protected] [email protected]

Send a message to two groupchats (-c) using a configuration file.

cat message.txt|go-sendxmpp -cf ./sendxmpp [email protected] [email protected]

Send file changes to two groupchats (-c) using a configuration file.

tail -f example.log|go-sendxmpp -cif ./sendxmpp [email protected] [email protected]

Send a notification if a long running process finishes.

waitpid $(pidof -s rsync) && echo "Rsync finished."|go-sendxmpp [email protected]

shell completion

There are no shell completions yet (contributions welcome) but for zsh it is possible to automatically create completions from --help and for fish it is possible to create completions from the man page. Those might work good enough.

zsh

Just place the following in your ~/.zshrc or ~/.zshrc.local:

compdef _gnu_generic go-sendxmpp

fish

Fish can generate them from the man page with following command:

fish_update_completions