From 083f207f7c07da745a9f8564233b11e15093793a Mon Sep 17 00:00:00 2001 From: bodqhrohro Date: Sun, 22 Dec 2019 04:21:40 +0200 Subject: [PATCH] Add README --- README.md | 129 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..1d672f8 --- /dev/null +++ b/README.md @@ -0,0 +1,129 @@ +## Telegabber: like Zhabogram, but in Go! ## + +Now it's native, more asynchronous, and does not require to mess your server up with a monstrous third-party interpreter. + +The configuration file is compatible with Zhabogram 2.0, so you can easily copy your existing `config.yml`. + +### Build ### + +Prerequisites: Go links the binary against the `glibc` version present in the system where the build process happens, so it should be less or equal to the version of `glibc` in the system where Telegabber will run. + +* Build TDLib according to [TDLib build instructions](https://tdlib.github.io/td/build.html). +* Install Go (tested with 1.13, but may work with earlier versions too). +* Open the source dir in a new shell (to make sure that `$GOPATH` works) and run `make`. Dependencies will be installed automatically. + +After a successful build, you get a single binary to deploy on your server. + +### Installation ### + +First of all, you need to create component listener on your Jabber server. +For example, for ejabberd in **/etc/ejabberd/ejabberd.yml**: + +``` +listen: + - + port: 8888 + module: ejabberd_service + access: all + shaper_rule: fast + ip: "127.0.0.1" + service_check_from: false + hosts: + "tlgrm.localhost": + password: "secret" +``` + + +Next, rename **config.yml.example** to **config.yml** and edit **xmpp** section to match your component listener: + + +``` +:xmpp: + db 'users.db' + jid: 'tlgrm.localhost' + host: 'localhost' + port: 8888 + secret: 'secret' + loglevel: :warn +``` + +### Configuration ### + +It is good idea to obtain Telegram API ID from [**https://my.telegram.org**](https://my.telegram.org) to remove demo key requests limit, and then edit in **config.yml**: + +``` +:telegram: + :tdlib: + :lib_path: 'lib/' + :client: + :api_id: '845316' # telegram API ID (my.telegram.org) # + :api_hash: '27fe5224bc822bf3a45e015b4f9dfdb7' # telegram API HASH (my.telegram.org) # + ... +``` + +### How to receive files from Telegram ### + +First of all, you need to set up web server that will serve some directory in your filesystem. +Example nginx config: + +``` +server { + listen 80; + server_name tlgrm.localhost; + location /content { + alias /var/zhabogram; + } +} +``` + +You need to set `:content: → :path: and :link:` **config.yml**. + +Set `:path:` according to location (for our example it will be `/var/zhabogram/content`). +Set `:link:` according to server_name (for our example it will be `http://tlgrm.localhost`) + + +### How to send files to Telegram chats ### + +You need to setup `mod_http_upload` for your XMPP server. +For example, for ejabberd in **/etc/ejabberd/ejabberd.yml** + +``` +modules: + mod_http_upload: + docroot: "/var/ejabberd/upload" # this must be a valid path, user ownership and SELinux flags must be set accordingly + put_url: "https://xmpp.localhost:5443/upload/@HOST@" + get_url: "https://xmppfiles.localhost/upload/@HOST@" + access: local + max_size: 500000000 #500 MByte + thumbnail: false + file_mode: "0644" + dir_mode: "0744" +``` + +Then you need to setup nginx proxy that will serve `get_url` path, because Telegram will not handle URLs with non-default http(s) ports. +Example nginx config: + +/``` +server { + listen 80; + listen 443 ssl; + + server_name xmppfiles.localhost; + + # SSL settigns # + keepalive_timeout 60; + ssl_certificate /etc/ssl/domain.crt; + ssl_certificate_key /etc/ssl/domain.key; + ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; + ssl_ciphers "RC4:HIGH:!aNULL:!MD5:!kEDH"; + add_header Strict-Transport-Security 'max-age=604800'; + + location / { + proxy_pass https://xmpp.localhost:5443; + } + +} + +``` + +Finally, update `:upload:` in your config.yml to match `server_name` in nginx config.