aboutsummaryrefslogblamecommitdiff
path: root/README.md
blob: 4a737984b86868e985646acbf59bae2932658c74 (plain) (tree)
1
2
3
4
5
6
7
8
9
10









                                                                                                                                                                                                                      
                                                                                                                                                                                           
 




                                                                                                                                      




                                                   














































                                                                                                                                                                         



                                                                                                  









































                                                                                                                                          
   






















                                                                                     
## 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). Roll back to commit 8d7bda00a535d1eda684c3c8802e85d69c89a14a if the compatibility got broken.

* 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.

In the deploy directory, you need only three files:
* `telegabber` (the binary)
* `config.yml`
* `config_schema.json` (copy it from the repo)

### 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) #
    ...
```

### Arguments ###

* `--profiling-port=xxxx`: starts the pprof server on port `xxxx`. Access is limited to localhost.

### 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.