An XMPP server written in Go (Golang).

Overview

jackal

An XMPP server written in Go.

Build Status GoDoc Test Coverage Maintainability Codacy Badge Go Report Card License Docker Pulls Join the chat at https://gitter.im/jackal-im/jackal

About

jackal is a free, open-source, high performance XMPP server which aims to be known for its stability, simple configuration and low resource consumption.

Features

jackal supports the following features:

  • Customizable
  • Enforced SSL/TLS
  • Stream compression (zlib)
  • Database connectivity for storing offline messages and user settings (BadgerDB, MySQL 5.7+, MariaDB 10.2+, PostgreSQL 9.5+)
  • Cross-platform (OS X, Linux)

Installing

Getting Started

To start using jackal, install Go 1.13+ and run the following commands:

$ go get -d github.com/ortuman/jackal
$ cd $GOPATH/src/github.com/ortuman/jackal
$ make install

This will retrieve the code and install the jackal server application into your $GOPATH/bin path.

By default the application will try to read server configuration from /etc/jackal/jackal.yml file, but alternatively you can specify a custom configuration path from command line.

$ jackal --config=$GOPATH/src/github.com/ortuman/jackal/example.jackal.yml

MySQL database creation

Grant right to a dedicated 'jackal' user (replace password with your desired password).

echo "CREATE USER IF NOT EXISTS 'jackal'@'localhost' IDENTIFIED BY 'password';" | mysql -h localhost -u root -p
echo "GRANT ALL ON jackal.* TO 'jackal'@'localhost';" | mysql -h localhost -u root -p

Create 'jackal' database (using previously created password).

echo "CREATE DATABASE jackal;" | mysql -h localhost -u jackal -p

Download lastest version of the MySQL schema from jackal Github repository.

wget https://raw.githubusercontent.com/ortuman/jackal/master/sql/mysql.up.sql

Load database schema into the database.

mysql -h localhost -D jackal -u jackal -p < mysql.up.sql

Your database is now ready to connect with jackal.

Using PostgreSQL

Create a user and a database for that user:

CREATE ROLE jackal WITH LOGIN PASSWORD 'password';
CREATE DATABASE jackal;
GRANT ALL PRIVILEGES ON DATABASE jackal TO jackal;

Run the postgres script file to create database schema. In jackal's root directory run:

psql --user jackal --password -f sql/postgres.up.psql

Configure jackal to use PostgreSQL by editing the configuration file:

storage:
  type: pgsql
  pgsql:
    host: 127.0.0.1:5432
    user: jackal
    password: password
    database: jackal

That's it!

Push notifications

Support for XEP-0357: Push Notifications is not yet available in jackal.

However there's a chance to forward offline messages to some external service by configuring offline module as follows:

  mod_offline:
    queue_size: 2500
    gateway:
      type: http
      auth: a-secret-token-here
      pass: http://127.0.0.1:6666

Each time a message is sent to an offline user a POST http request to the pass URL is made, using the specified Authorization header and including the message stanza into the request body.

Run jackal in Docker

Set up jackal in the cloud in under 5 minutes with zero knowledge of Golang or Linux shell using our jackal Docker image.

$ docker pull ortuman/jackal
$ docker run --name jackal -p 5222:5222 ortuman/jackal

Supported Specifications

Join and Contribute

The jackal developer community is vital to improving jackal future releases.

Contributions of all kinds are welcome: reporting issues, updating documentation, fixing bugs, improving unit tests, sharing ideas, and any other tips that may help the jackal community.

Code of Conduct

Help us keep jackal open and inclusive. Please read and follow our Code of Conduct.

Licensing

jackal is licensed under the GNU General Public License, Version 3.0. See LICENSE for the full license text.

Contact

If you have any suggestion or question:

Miguel Ángel Ortuño, JID: [email protected], email: [email protected]

Issues
  • Server does not send enough data per packet

    Server does not send enough data per packet

    testable on wormhole.chat

    There seems to be a bug in the way the server sends stanzas, often it sends only small parts of a stanza

    <
    _____________
    
    16.03.2019 15:01:44 (I) nbxmpp.transports        | pollin called, state == CONNECTED
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout removed for fd 700
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 55 seconds
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 120 seconds with function <bound method NonBlockingTransport.read_timeout2 of <nbxmpp.transports.NonBlockingTCP object at 0x0000000009569390>>
    16.03.2019 15:01:44 (I) nbxmpp.client            | raising event from transport: :::::DATA RECEIVED::::
    _____________
    iq
    _____________
    
    16.03.2019 15:01:44 (I) nbxmpp.transports        | pollin called, state == CONNECTED
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout removed for fd 700
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 55 seconds
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 120 seconds with function <bound method NonBlockingTransport.read_timeout2 of <nbxmpp.transports.NonBlockingTCP object at 0x0000000009569390>>
    16.03.2019 15:01:44 (I) nbxmpp.client            | raising event from transport: :::::DATA RECEIVED::::
    _____________
    
    _____________
    
    16.03.2019 15:01:44 (I) nbxmpp.transports        | pollin called, state == CONNECTED
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout removed for fd 700
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 55 seconds
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 120 seconds with function <bound method NonBlockingTransport.read_timeout2 of <nbxmpp.transports.NonBlockingTCP object at 0x0000000009569390>>
    16.03.2019 15:01:44 (I) nbxmpp.client            | raising event from transport: :::::DATA RECEIVED::::
    _____________
    type
    _____________
    
    16.03.2019 15:01:44 (I) nbxmpp.transports        | pollin called, state == CONNECTED
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout removed for fd 700
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 55 seconds
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 120 seconds with function <bound method NonBlockingTransport.read_timeout2 of <nbxmpp.transports.NonBlockingTCP object at 0x0000000009569390>>
    16.03.2019 15:01:44 (I) nbxmpp.client            | raising event from transport: :::::DATA RECEIVED::::
    _____________
    ="
    _____________
    
    16.03.2019 15:01:44 (I) nbxmpp.transports        | pollin called, state == CONNECTED
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout removed for fd 700
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 55 seconds
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 120 seconds with function <bound method NonBlockingTransport.read_timeout2 of <nbxmpp.transports.NonBlockingTCP object at 0x0000000009569390>>
    16.03.2019 15:01:44 (I) nbxmpp.client            | raising event from transport: :::::DATA RECEIVED::::
    _____________
    result
    _____________
    
    16.03.2019 15:01:44 (I) nbxmpp.transports        | pollin called, state == CONNECTED
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout removed for fd 700
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 55 seconds
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 120 seconds with function <bound method NonBlockingTransport.read_timeout2 of <nbxmpp.transports.NonBlockingTCP object at 0x0000000009569390>>
    16.03.2019 15:01:44 (I) nbxmpp.client            | raising event from transport: :::::DATA RECEIVED::::
    _____________
    "
    _____________
    
    16.03.2019 15:01:44 (I) nbxmpp.transports        | pollin called, state == CONNECTED
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout removed for fd 700
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 55 seconds
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 120 seconds with function <bound method NonBlockingTransport.read_timeout2 of <nbxmpp.transports.NonBlockingTCP object at 0x0000000009569390>>
    16.03.2019 15:01:44 (I) nbxmpp.client            | raising event from transport: :::::DATA RECEIVED::::
    _____________
    
    _____________
    
    16.03.2019 15:01:44 (I) nbxmpp.transports        | pollin called, state == CONNECTED
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout removed for fd 700
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 55 seconds
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 120 seconds with function <bound method NonBlockingTransport.read_timeout2 of <nbxmpp.transports.NonBlockingTCP object at 0x0000000009569390>>
    16.03.2019 15:01:44 (I) nbxmpp.client            | raising event from transport: :::::DATA RECEIVED::::
    _____________
    id
    _____________
    
    16.03.2019 15:01:44 (I) nbxmpp.transports        | pollin called, state == CONNECTED
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout removed for fd 700
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 55 seconds
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 120 seconds with function <bound method NonBlockingTransport.read_timeout2 of <nbxmpp.transports.NonBlockingTCP object at 0x0000000009569390>>
    16.03.2019 15:01:44 (I) nbxmpp.client            | raising event from transport: :::::DATA RECEIVED::::
    _____________
    ="
    _____________
    
    16.03.2019 15:01:44 (I) nbxmpp.transports        | pollin called, state == CONNECTED
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout removed for fd 700
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 55 seconds
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 120 seconds with function <bound method NonBlockingTransport.read_timeout2 of <nbxmpp.transports.NonBlockingTCP object at 0x0000000009569390>>
    16.03.2019 15:01:44 (I) nbxmpp.client            | raising event from transport: :::::DATA RECEIVED::::
    _____________
    72bfa1e8-7cfe-45ae-a9d8-bc25a6fd551b
    _____________
    
    16.03.2019 15:01:44 (I) nbxmpp.transports        | pollin called, state == CONNECTED
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout removed for fd 700
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 55 seconds
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 120 seconds with function <bound method NonBlockingTransport.read_timeout2 of <nbxmpp.transports.NonBlockingTCP object at 0x0000000009569390>>
    16.03.2019 15:01:44 (I) nbxmpp.client            | raising event from transport: :::::DATA RECEIVED::::
    _____________
    "
    _____________
    
    16.03.2019 15:01:44 (I) nbxmpp.transports        | pollin called, state == CONNECTED
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout removed for fd 700
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 55 seconds
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 120 seconds with function <bound method NonBlockingTransport.read_timeout2 of <nbxmpp.transports.NonBlockingTCP object at 0x0000000009569390>>
    16.03.2019 15:01:44 (I) nbxmpp.client            | raising event from transport: :::::DATA RECEIVED::::
    _____________
    
    _____________
    
    16.03.2019 15:01:44 (I) nbxmpp.transports        | pollin called, state == CONNECTED
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout removed for fd 700
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 55 seconds
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 120 seconds with function <bound method NonBlockingTransport.read_timeout2 of <nbxmpp.transports.NonBlockingTCP object at 0x0000000009569390>>
    16.03.2019 15:01:44 (I) nbxmpp.client            | raising event from transport: :::::DATA RECEIVED::::
    _____________
    from
    _____________
    
    16.03.2019 15:01:44 (I) nbxmpp.transports        | pollin called, state == CONNECTED
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout removed for fd 700
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 55 seconds
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 120 seconds with function <bound method NonBlockingTransport.read_timeout2 of <nbxmpp.transports.NonBlockingTCP object at 0x0000000009569390>>
    16.03.2019 15:01:44 (I) nbxmpp.client            | raising event from transport: :::::DATA RECEIVED::::
    _____________
    ="
    _____________
    
    16.03.2019 15:01:44 (I) nbxmpp.transports        | pollin called, state == CONNECTED
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout removed for fd 700
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 55 seconds
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 120 seconds with function <bound method NonBlockingTransport.read_timeout2 of <nbxmpp.transports.NonBlockingTCP object at 0x0000000009569390>>
    16.03.2019 15:01:44 (I) nbxmpp.client            | raising event from transport: :::::DATA RECEIVED::::
    _____________
    [email protected]
    _____________
    
    16.03.2019 15:01:44 (I) nbxmpp.transports        | pollin called, state == CONNECTED
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout removed for fd 700
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 55 seconds
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 120 seconds with function <bound method NonBlockingTransport.read_timeout2 of <nbxmpp.transports.NonBlockingTCP object at 0x0000000009569390>>
    16.03.2019 15:01:44 (I) nbxmpp.client            | raising event from transport: :::::DATA RECEIVED::::
    _____________
    "
    _____________
    
    16.03.2019 15:01:44 (I) nbxmpp.transports        | pollin called, state == CONNECTED
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout removed for fd 700
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 55 seconds
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 120 seconds with function <bound method NonBlockingTransport.read_timeout2 of <nbxmpp.transports.NonBlockingTCP object at 0x0000000009569390>>
    16.03.2019 15:01:44 (I) nbxmpp.client            | raising event from transport: :::::DATA RECEIVED::::
    _____________
    
    _____________
    
    16.03.2019 15:01:44 (I) nbxmpp.transports        | pollin called, state == CONNECTED
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout removed for fd 700
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 55 seconds
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 120 seconds with function <bound method NonBlockingTransport.read_timeout2 of <nbxmpp.transports.NonBlockingTCP object at 0x0000000009569390>>
    16.03.2019 15:01:44 (I) nbxmpp.client            | raising event from transport: :::::DATA RECEIVED::::
    _____________
    to
    _____________
    
    16.03.2019 15:01:44 (I) nbxmpp.transports        | pollin called, state == CONNECTED
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout removed for fd 700
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 55 seconds
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 120 seconds with function <bound method NonBlockingTransport.read_timeout2 of <nbxmpp.transports.NonBlockingTCP object at 0x0000000009569390>>
    16.03.2019 15:01:44 (I) nbxmpp.client            | raising event from transport: :::::DATA RECEIVED::::
    _____________
    ="
    _____________
    
    16.03.2019 15:01:44 (I) nbxmpp.transports        | pollin called, state == CONNECTED
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout removed for fd 700
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 55 seconds
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 120 seconds with function <bound method NonBlockingTransport.read_timeout2 of <nbxmpp.transports.NonBlockingTCP object at 0x0000000009569390>>
    16.03.2019 15:01:44 (I) nbxmpp.client            | raising event from transport: :::::DATA RECEIVED::::
    _____________
    [email protected]/gajim.4JHK9BLI
    _____________
    
    16.03.2019 15:01:44 (I) nbxmpp.transports        | pollin called, state == CONNECTED
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout removed for fd 700
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 55 seconds
    16.03.2019 15:01:44 (I) nbxmpp.idlequeue         | read timeout set for fd 700 on 120 seconds with function <bound method NonBlockingTransport.read_timeout2 of <nbxmpp.transports.NonBlockingTCP object at 0x0000000009569390>>
    16.03.2019 15:01:44 (I) nbxmpp.client            | raising event from transport: :::::DATA RECEIVED::::
    _____________
    "
    _____________
    
    pending-response pending to fix 
    opened by lovetox 10
  • error code 503 on sending the message

    error code 503 on sending the message

    This was spotted on Xabber client, when two buddies communicate. From certain point only one of them is able to send the messages , the other one is getting error and cannot send any more message. Subscription is both,both in the DB.

    error-503-red-cross.txt

    Still cannot reproduce what possibly could cause this issue.

    opened by readyblue 10
  • Why Jackal? Why a new XMPP Server

    Why Jackal? Why a new XMPP Server

    Hello everyone, I am searching for a xmpp server for my new project. And I just want to know the reason why you decide to create a new XMPP server even if there are already good existing one. I am just starting with xmpp so I am not an expert.

    What is the advantage of Jackal in comparison to the others like ejabberd or openfire?

    Thanks in advance.

    opened by JusticeN 9
  • XEP-0045 - Multi-User Chat support (#58)

    XEP-0045 - Multi-User Chat support (#58)

    Specification described in XEP-0045 Implementation notes:

    • no support for the legacy groupchat 1.0 protocol
    • no chat logging or chat history available on the server side
    • no explicit room nickname reservation or registering with a room (any occupant with affiliation is automatically registered and the nickname is reserved)
    • no timer for the instant room creation (client has to either explicitly create an instant room or create a reserved room)
    • no support for adding admins and owners through the room configuration form (it is messy and error prone)
    feature-request on-hold 
    opened by mmalesev 8
  • s2s lookup error

    s2s lookup error

    jackal can't find a server, even though dig shows it resolves correctly.

    2019-03-11 23:51:42 💥 [ERR] s2s/server:94 - lookup _xmpp-server._tcp.riotcat.org on 9.9.9.9:53: no such host
    
    # dig riotcat.org
    
    ; <<>> DiG 9.10.3-P4-Debian <<>> riotcat.org
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59702
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;riotcat.org.			IN	A
    
    ;; ANSWER SECTION:
    riotcat.org.		3586	IN	A	87.106.127.220
    
    ;; Query time: 0 msec
    ;; SERVER: 9.9.9.9#53(9.9.9.9)
    ;; WHEN: Mon Mar 11 23:52:57 UTC 2019
    ;; MSG SIZE  rcvd: 56
    

    The error is consistent, I can't get any kind of connection to that server at all.

    This isn't a global issue, I can successfully connect to other servers and send messages to users on them. According to compliance.conversations.im, the remote server is running Prosody 0.11.

    Then when I was checking logs for more errors, I found that a server I can successfully communicate on is also returning the same error occasionally (2019-03-12 01:54:52 💥 [ERR] s2s/server:94 - lookup _xmpp-server._tcp.chat.404.city on 9.9.9.9:53: no such host). The remote server with the intermittent error is running ejabberd 18.12.1-2~bpo9+1.

    Maybe it's something I can tweak in the config? s2s section of jackal.yml is the same as in the example:

    s2s:
        dial_timeout: 15
        dialback_secret: s3cr3tf0rd14lb4ck
        max_stanza_size: 131072
    
        transport:
          bind_addr: 0.0.0.0
          port: 5269
          keep_alive: 600
    
    bug pending-response 
    opened by waveletlet 7
  • Failing build due to changed dependency

    Failing build due to changed dependency

    The build is currently failing due to a checksum mismatch:

    verifying github.com/jackal-xmpp/[email protected]: checksum mismatch
            downloaded: h1:xhx6XS5VLqgMQec0qp0yQE53+9dttsL7SjQKBXnJmcQ=
            go.sum:     h1:zwcW3PwR6uF9h52myAPNQt5YmbyuIpDvyDStUobclOc=
    
    opened by SamWhited 6
  • Please add SCRAM-SHA-512(-PLUS) again and there is the SCRAM-SHA3-512(-PLUS)

    Please add SCRAM-SHA-512(-PLUS) again and there is the SCRAM-SHA3-512(-PLUS)

    Following the removal of SCRAM-SHA-512(-PLUS), I request you the addition and there is SCRAM-SHA3-512(-PLUS) in the same time.

    SCRAM-SHA-512(-PLUS):

    • https://tools.ietf.org/html/draft-melnikov-scram-sha-512

    SCRAM-SHA3-512(-PLUS):

    • https://tools.ietf.org/html/draft-melnikov-scram-sha3-512
    opened by Neustradamus 6
  • Support for PostgreSQL

    Support for PostgreSQL

    This makes jackal work with PostgreSQL, but it's far from perfect. It's a bunch of switch statements in places where database-specific queries are needed. While this should be ok-ish for now, I see a need for a bigger overhaul of the storage code to better support multiple database engines. I'd be happy to discuss and work on this some more.

    opened by robzon 6
  • Update the logo

    Update the logo

    I have seen a beautiful logo but the XMPP logo has been updated last year, can you update it too? https://github.com/ortuman/jackal/blob/master/doc/gopher.png

    Source: https://commons.wikimedia.org/wiki/File:XMPP_logo.svg

    pending to fix 
    opened by Neustradamus 6
  • how to manage users from an external script ?

    how to manage users from an external script ?

    I would like to use an external server to provide authentication. Is there builtin support in jackal for any of these protocols? If not, has this been attempted before?

    If managing authentication externally is not feasible I was thinking of creating a php script exposing an HTTP API on the jackal server for the other server to manage users (create/disable/enable/set password).

    What is the best way to tackle this without heavy modifications to both systems?

    Thanks

    feature-request 
    opened by beppe9000 5
  • Track dependencies with dep

    Track dependencies with dep

    Makes it easier for developers to get started, plus makes sure we're all working with the same version of every dependency.

    Simply use dep ensure when you pull in a change of Gopkg.lock.

    opened by stevenroose 5
  • send file/picture feature

    send file/picture feature

    Hi All

    I'd like to have the feature of sending picture or file to the chat session. Is there anybody working on this feature? Do you know which XEP we should implement for that?

    Thanks,Xu

    feature-request 
    opened by xu4wang 1
Releases(v0.61.0)
Owner
Miguel Ángel Ortuño
Miguel Ángel Ortuño
A push notification server written in Go (Golang).

A push notification micro server using Gin framework written in Go (Golang)

Bo-Yi Wu 6.4k Jul 1, 2022
Simple HTTP server written in golang

Simple HTTP server written in golang Simple webserver in golang, to demonstrate basic functionalities like e.g. sending back some request header info,

null 0 Nov 30, 2021
Go-simplehttp - Simple HTTP server written in golang

Simple HTTP server written in golang Simple webserver in golang, to demonstrate

null 0 Jan 1, 2022
a simple http server as replacement of python -m http.server

ser a simple http server as replacement of python -m http.server

Changkun Ou 4 Feb 16, 2022
OpenAPI specs for your Go server, generated at server runtime. No CLI, no code generation, and no HTTP

Overview "oas" is short for "OpenAPI Spec". Go package for generating OpenAPI docs at runtime. Non-features: No code generation. No CLI. No magic comm

Nelo Mitranim 0 Dec 3, 2021
A Language Server Protocol (LSP) server for Jsonnet

Jsonnet Language Server A Language Server Protocol (LSP) server for Jsonnet. Features Jump to definition self-support.mp4 dollar-support.mp4 Error/War

Grafana Labs 56 Jun 24, 2022
Go web server - A web server that can accept a GET request and serve a response.

go_web_server A web server that can accept a GET request and serve a response. Go is a great language for creating simple yet efficient web servers an

Gilbert Ngeno 0 Jan 3, 2022
⚡ A fast, lightweight, and secure chat protocol, client and server, written in Go.

⚡ A fast, lightweight, and secure chat protocol, client and server, written in Go.

Bolt 16 Jan 19, 2022
Minimal HTTP File Server for pentesting written in Go

Golang implementation of simple HTTP server with upload feature.

Vincent Carlos 76 May 11, 2022
Ciak is a lightweight media server written in go

Ciak allows you to show and stream your personal media tv series, movies, etc with a simple and clean web ui. The server also provide on the fly video encoding in order to stream non standard formats such as avi, mkv...

Tommaso Garuglieri 30 Mar 3, 2022
A simple file server written in Go. Allows files to be uploaded, downloaded, or deleted.

Go File Server This is a simple file server written in Go. Have you ever wanted to transfer files between computers on the same LAN? Simply run this p

null 0 Jan 14, 2022
Opinionated boilerplate Golang HTTP server with CORS, OPA, Prometheus, rate-limiter for API and static website.

Teal.Finance/Server Opinionated boilerplate HTTP server with CORS, OPA, Prometheus, rate-limiter… for API and static website. Origin This library was

teal.finance 7 Mar 26, 2022
Golang U2F Server Implementation

U2F Server Implementation This repository implements a register and authenticate endpoint and provides frontend (JavaScript) code that demonstrates a

Alexander Rausch 4 Feb 4, 2022
Simple Golang Product API Server

Simple Golang Product API Server Layanan API untuk menambah, merubah informasi, mengambil data dan menghapus produk. Implementasi kode terinspirasi ol

Widya Ade Bagus 2 Oct 29, 2021
RBTI Golang Server uses PostgreSQL and for its main database and uses Elasticsearch

RBTI Golang Server This server is used for my thesis project, it uses PostgreSQL and for its main database and uses Elasticsearch for faster query spe

Haikal Ikhwan 0 Jan 17, 2022
A very simple Golang server handling basic GET and POST requests

GOLANG SERVER INTRO As a true Blockchain enthusiast, I had to learn Solidity and Golang to participate to several projects. This repository consists o

null 0 Nov 17, 2021
Backend for Workery application server implemented in Golang

workery-server Backend for Workery application server implemented in Golang. This is a rewrite of the workery-django project. Development Goals: Rewri

Over 55 (London) Inc. 1 Dec 15, 2021
A basic server built using golang.

Go Server A genral purpose server built using golang Go Server is a genral purpose server meant to be simple to use and begginner friendly. Currently

null 0 Dec 19, 2021