Git Product home page Git Product logo

jackal's People

Contributors

cybernet avatar dependabot[bot] avatar mirkoperillo avatar ortuman avatar samwhited avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jackal's Issues

XML error on login when reconnect from different network

This was spotted on Xabber:
when you are connected on mobile data and reconnect to wifi, Xabber cannot login again due to
XML error on reconnect.

Normally it should reconnect and server should immediately disconnect previous connection and replace it with new one.

Session establishment (as per rfc3921) should not be required by the server

rfc6121 (which obsoletes rfc3921) no longer requires session to be explicitly established by the client:

From rfc6121:

Interoperability Note: [RFC3921] specified one additional precondition: formal establishment of an instant messaging and presence session. Implementation and deployment experience has shown that this additional step is unnecessary. However, for backward compatibility an implementation MAY still offer that feature. This enables older software to connect while letting newer software save a round trip.

jackal still requires the session to be explicitly open.

xml/jid: JID parses correctly even if resource part is empty

Parsing a JID with an empty resourcepart does not fail as expected:

_, err := jid.NewWithString("[email protected]/", false)
if err == nil { panic("oops") }

Empty resourceparts are illegal according to RFC7622 ยง 3.4. Resourcepart:

The resourcepart of a JID MUST NOT be zero octets in length and MUST
NOT be more than 1023 octets in length. This rule is to be enforced
after any normalization and mapping of code points as well as
encoding of the string as UTF-8.

In-Band registration: Support Captcha (XEP-0158)

Nice to have: Captchas for In-Band registration.

https://xmpp.org/extensions/xep-0158.html#register

Background info: Some XMPP server operators turn off in-band registration because of misuse by spam bots. Most web registration interfaces support captchas, so this is a common approach how to handle registrations.

Still this is not a really satisfying practise, since in-band registration exists for a reason and users are expecting to be able to register directly via their XMPP client (and not only via web). Therefore I'm asking to implement captchas for in-band registration.

Note: Captchas should not be implemented via Google Recatchas, because avoiding Google and its services is a main reason why people use XMPP ;-) XMPP users tend to dislike links and dependencies to/from "big players" for a good reason. Fortunately, there are some Golang captcha libraries out there, such as: https://github.com/dchest/captcha

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.

XEP-0443: XMPP Compliance Suites 2021

Please add support of XEP-0443: XMPP Compliance Suites 2021: https://xmpp.org/extensions/xep-0443.html

Which replaces:

Ping from Pidgin to Jackal fails

I do not have an explanation yet, but pings from Pidgin to Jackal seem to fail:

2018-03-30 17:34:19 ๐Ÿ” [DBG] stream:871 - RECV: <iq type="get" id="purpleba33a79"><ping xmlns="urn:xmpp:ping"/></iq>
2018-03-30 17:34:19 ๐Ÿ” [DBG] stream:866 - SEND: <iq type="error" id="purpleba33a79" to="jackal1.security-enforced.de" from="[email protected]/test"><ping xmlns="urn:xmpp:ping"/><error code="403" type="auth"><forbidden xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq>

The [email protected] account was also created via Pidgin / In-band registration. Client connection to the server is fine - authentication was successful.

Can't go get without errors

Hi, I've tried to install Jackal on my test virtual server running Debian 9 Stretch. I've installed Golang 1.7.4:

root@jackal1 ~/golang # go version
go version go1.7.4 linux/amd64

... and all the build requirements for Jackal dependencies. Now go get github.com/ortuman/jackal results in this error messages:

root@jackal1 ~/golang # go get github.com/ortuman/jackal
# github.com/dgraph-io/badger
src/github.com/dgraph-io/badger/db.go:1108: y.LSMSize.Get(db.opt.Dir).(*expvar.Int).Value undefined (type *expvar.Int has no field or method Value)
src/github.com/dgraph-io/badger/db.go:1109: y.VlogSize.Get(db.opt.Dir).(*expvar.Int).Value undefined (type *expvar.Int has no field or method Value)
src/github.com/dgraph-io/badger/level_handler.go:66: undefined: sort.Slice
src/github.com/dgraph-io/badger/level_handler.go:71: undefined: sort.Slice
src/github.com/dgraph-io/badger/levels.go:253: undefined: sort.Slice
src/github.com/dgraph-io/badger/levels.go:355: undefined: sort.Slice
src/github.com/dgraph-io/badger/levels.go:442: undefined: sort.Slice
src/github.com/dgraph-io/badger/transaction.go:233: undefined: sort.Slice
src/github.com/dgraph-io/badger/value.go:665: undefined: sort.Slice

Is there anything I can do about it... or is this a bug?

[...] This will retrieve the code and install the jackal server application into your $GOBIN path.

There's no binary in my $GOBIN after go get.

MySQL database schema import: Specified key was too long; max key length is 767 bytes

When trying to import the MySQL schema for Jackal, my MySQL server reports an error:

root@jackal1 ~/golang/src/github.com/ortuman/jackal # mysql jackal < sql/mysql.sql 
ERROR 1071 (42000) at line 6: Specified key was too long; max key length is 767 bytes

Note that I'm not using the official Oracle MySQL, but MariaDB as a MySQL server. Since MariaDB is e.g. shipped with Debian by default, I think this issue should be investigated and compatibility should be provided in the future.

Maybe this issue from another Golang project is helpful? https://github.com/gogits/gogs/pull/4913/files

User can get stuck in online state, yet no way to go offline

After a while of running server with about 3 testing users, one user get stuck in online state, even if there was no client connected to that user. Server stop sending pings, so the user cannot even timeout and disconnect. Incoming messages to this stucked user was treated by server as if it was online, yet no pings were sent.

This stucked user never disconnect. When client loged in to this stucked user, it can send the messages, but was unable to receive new messages (only OTR session control messages). It is difficult to spot this issue by users, as delivery reports working and showing that message was received even when it is not !

From this point, there was no help, not even logout and login again, remove user from contact and authorize it back again from both sides.

There is only fix when this happens to restart the server. Nothing clients can do about this stucked user

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

RFCs and XEPs support page with VERSION

Suggestion: optional gateway mode for Mattermost?

Sorry for posting a suggestion only...

Anyways, this project would be ideal I think to include a gateway mode for the Mattermost chat system. They already have a similar system for IRC that allows connecting to Mattermost with any IRC client and have previously suggested that a similar approach could also be used to allow Mattermost to act as a XMPP server backend.

The relevant code for the minimalist IRC server can be found here:
https://github.com/42wim/matterircd

Both Mattermost and the MatterIRCd are written in Go, just like Jackal.

@42wim could probably provide some feedback on the feasibility of this suggestion.

Thanks in advance for looking into this suggestion :)

Private key available in repo

I doubt you meant to commit your certs to the repo, but they should be removed (and probably invalidate/revoke them).

Jackal does not respond to registration request

Hello,

I've set up Jackal on an entirely new machine (Debian Stretch) with PostgreSQL. Unfortunately I'm not able to create a new account on my server. Both Pidgin and Conversations for Android get stuck and neither the server nor the client is responding after a certain point.

Feb 07 17:23:52 jackal jackal[1619]: 2019-02-07 17:23:52 โ„น๏ธ [INF] c2s/server:147 - registered c2s stream... (id: c2s:default:3)
Feb 07 17:23:52 jackal jackal[1619]: 2019-02-07 17:23:52 ๐Ÿ” [DBG] session/session:219 - RECV(c2s:default:3): <stream:stream version="1.0" xml:lang="en" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" to="jackal.650thz.de"/>
Feb 07 17:23:52 jackal jackal[1619]: 2019-02-07 17:23:52 ๐Ÿ” [DBG] session/session:182 - SEND(c2s:default:3): <?xml version="1.0"?><stream:stream xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" id="46407619-0aed-471d-ba71-67ba9f7aed9d" from="jackal.650thz.de" version="1.0"><stream:features xmlns:stream="http://etherx.jabber.org/streams" version="1.0"><starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"><required/></starttls></stream:features>
Feb 07 17:23:52 jackal jackal[1619]: 2019-02-07 17:23:52 ๐Ÿ” [DBG] session/session:219 - RECV(c2s:default:3): <starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
Feb 07 17:23:52 jackal jackal[1619]: 2019-02-07 17:23:52 ๐Ÿ” [DBG] session/session:209 - SEND(c2s:default:3): <proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
Feb 07 17:23:52 jackal jackal[1619]: 2019-02-07 17:23:52 โ„น๏ธ [INF] c2s/in:487 - secured stream... id: c2s:default:3
Feb 07 17:23:52 jackal jackal[1619]: 2019-02-07 17:23:52 ๐Ÿ” [DBG] session/session:219 - RECV(c2s:default:3): <stream:stream version="1.0" xml:lang="en" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" to="jackal.650thz.de"/>
Feb 07 17:23:52 jackal jackal[1619]: 2019-02-07 17:23:52 ๐Ÿ” [DBG] session/session:182 - SEND(c2s:default:3): <?xml version="1.0"?><stream:stream xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" id="50fd5c57-1857-47af-b253-3dc222122141" from="jackal.650thz.de" version="1.0"><stream:features xmlns:stream="http://etherx.jabber.org/streams" version="1.0"><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>PLAIN</mechanism><mechanism>DIGEST-MD5</mechanism><mechanism>SCRAM-SHA-1</mechanism><mechanism>SCRAM-SHA-1-PLUS</mechanism><mechanism>SCRAM-SHA-256</mechanism><mechanism>SCRAM-SHA-256-PLUS</mechanism><mechanism>SCRAM-SHA-512</mechanism><mechanism>SCRAM-SHA-512-PLUS</mechanism></mechanisms><register xmlns="http://jabber.org/features/iq-register"/></stream:features>
Feb 07 17:23:52 jackal jackal[1619]: 2019-02-07 17:23:52 ๐Ÿ” [DBG] session/session:219 - RECV(c2s:default:3): <iq type="get" id="fTpaDp5chmgJ" to="jackal.650thz.de"><query xmlns="jabber:iq:register"/></iq>

Jackal Version: 0.4.8
Database Backend: PostgreSQL 9.6+181+deb9u2
TLS CA: Let's Encrypt

Configuration:

pid_path: /var/run/jackal/jackal.pid

debug:
  port: 6060

logger:
  level: debug
  log_path: /var/log/jackal/jackal.log

#storage:
#  type: mysql
#  mysql:
#    host: 127.0.0.1:3306
#    user: jackal
#    password: password
#    database: jackal
#    pool_size: 16

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


#  cluster:
#  name: node1
#  port: 5010
#  hosts: [127.0.0.1:5009, 127.0.0.1:5011]

router:
  hosts:
    - name: jackal.650thz.de
      tls:
        privkey_path: "/etc/jackal/privkey.pem"
        cert_path: "/etc/jackal/fullchain.pem"

modules:
  enabled:
    - roster           # Roster
    - last_activity    # XEP-0012: Last Activity
    - private          # XEP-0049: Private XML Storage
    - vcard            # XEP-0054: vcard-temp
    - registration     # XEP-0077: In-Band Registration
    - version          # XEP-0092: Software Version
    - blocking_command # XEP-0191: Blocking Command
    - ping             # XEP-0199: XMPP Ping
    - offline          # Offline storage

  mod_roster:
    versioning: true

  mod_offline:
    queue_size: 2500

  mod_registration:
    allow_registration: yes
    allow_change: yes
    allow_cancel: yes

  mod_version:
    show_os: true

  mod_ping:
    send: no
    send_interval: 60

c2s:
  - id: default

    connect_timeout: 5
    max_stanza_size: 65536
    resource_conflict: replace  # [override, replace, reject]

    transport:
      type: socket # websocket
      bind_addr: 0.0.0.0
      port: 5222
      keep_alive: 120
      # url_path: /xmpp/ws

    compression:
      level: default

    sasl:
      - plain
      - digest_md5
      - scram_sha_1
      - scram_sha_256
      - scram_sha_512

#s2s:
#    dial_timeout: 15
#    dialback_secret: s3cr3tf0rd14lb4ck
#    max_stanza_size: 131072
#
#    transport:
#      bind_addr: 0.0.0.0
#      port: 5269
#      keep_alive: 600

Please let me know if you need any more information :-)

make install error

Hi,

I'm trying to install jackal and getting below error.

WangXus-MacBook-Pro:flitter wangxu$ go get -d github.com/ortuman/jackal
WangXus-MacBook-Pro:flitter wangxu$ cd $GOPATH/src/github.com/ortuman/jackal
WangXus-MacBook-Pro:jackal wangxu$ make install
# github.com/dgraph-io/badger/pb
../../dgraph-io/badger/pb/pb.pb.go:119:24: undefined: proto.InternalMessageInfo
../../dgraph-io/badger/pb/pb.pb.go:208:28: undefined: proto.InternalMessageInfo
../../dgraph-io/badger/pb/pb.pb.go:256:39: undefined: proto.InternalMessageInfo
../../dgraph-io/badger/pb/pb.pb.go:305:36: undefined: proto.InternalMessageInfo
../../dgraph-io/badger/pb/pb.pb.go:368:33: undefined: proto.InternalMessageInfo
../../dgraph-io/badger/pb/pb.pb.go:430:32: undefined: proto.InternalMessageInfo
../../dgraph-io/badger/pb/pb.pb.go:485:30: undefined: proto.InternalMessageInfo
# github.com/ortuman/jackal/log
log/log.go:168:9: undefined: strings.Builder
# github.com/miekg/dns
../../miekg/dns/dnssec_keyscan.go:260:7: undefined: strings.Builder
../../miekg/dns/msg_helpers.go:271:8: undefined: strings.Builder
../../miekg/dns/serve_mux.go:43:9: undefined: strings.Builder
../../miekg/dns/types.go:440:10: undefined: strings.Builder
../../miekg/dns/types.go:464:10: undefined: strings.Builder
../../miekg/dns/types.go:492:10: undefined: strings.Builder
../../miekg/dns/types.go:513:29: undefined: strings.Builder
../../miekg/dns/types.go:523:28: undefined: strings.Builder
make: *** [install] Error 2

Is there something I need double check?

BR,Xu

Communication is lost

After the server has been running for some time, there is a client connection again. The message is somehow lost in the process of shaking hands

Documentation

Is there any documentation, example that explains/helps how to use this server? It would be really great if there proper documentation.

Run jackal on shared host?

Hello,
I would like to know whether jackal is running on a shared host, Im using uberspace, but there is no docker possibility and another ways are not easy enough to run a own XMPP server on it.

Thanks

Cannot register via Conversations App

I tried to register a new user "root" on my host "jackal1.security-enforced.de" via the Conversations Android app. Registration failed with this error message:

2018-03-30 17:27:41 โ„น๏ธ [INF] c2s:121 - registered stream... (id: jackal1.security-enforced.de:11)
2018-03-30 17:27:42 ๐Ÿ” [DBG] stream:871 - RECV: <stream:stream version="1.0" xml:lang="en" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" to="jackal1.security-enforced.de"/>
2018-03-30 17:27:42 ๐Ÿ” [DBG] stream:866 - SEND: <stream:features xmlns:stream="http://etherx.jabber.org/streams" version="1.0"><starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"><required/></starttls></stream:features>
2018-03-30 17:27:42 ๐Ÿ” [DBG] stream:871 - RECV: <starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
2018-03-30 17:27:42 ๐Ÿ” [DBG] stream:866 - SEND: <proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
2018-03-30 17:27:42 โ„น๏ธ [INF] stream:524 - secured stream... id: jackal1.security-enforced.de:11
2018-03-30 17:27:42 ๐Ÿ” [DBG] stream:871 - RECV: <stream:stream version="1.0" xml:lang="en" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" to="jackal1.security-enforced.de"/>
2018-03-30 17:27:42 ๐Ÿ” [DBG] stream:866 - SEND: <stream:features xmlns:stream="http://etherx.jabber.org/streams" version="1.0"><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>PLAIN</mechanism><mechanism>DIGEST-MD5</mechanism><mechanism>SCRAM-SHA-1</mechanism><mechanism>SCRAM-SHA-1-PLUS</mechanism><mechanism>SCRAM-SHA-256</mechanism><mechanism>SCRAM-SHA-256-PLUS</mechanism></mechanisms><register xmlns="http://jabber.org/features/iq-register"/></stream:features>
2018-03-30 17:27:42 ๐Ÿ” [DBG] stream:871 - RECV: <iq type="get" id="AJ_X1mDV_3-N" to="jackal1.security-enforced.de"><query xmlns="jabber:iq:register"/></iq>
2018-03-30 17:27:42 ๐Ÿ” [DBG] stream:866 - SEND: <iq type="result" id="AJ_X1mDV_3-N" from="jackal1.security-enforced.de" to="jackal1.security-enforced.de"><query xmlns="jabber:iq:register"><username/><password/></query></iq>
2018-03-30 17:27:42 ๐Ÿ” [DBG] stream:871 - RECV: <iq type="set" id="rMx6g_wnzH8J" from="[email protected]"><query xmlns="jabber:iq:register"><username>root2</username><password>pass</password></query></iq>
2018-03-30 17:27:42 ๐Ÿ” [DBG] stream:866 - SEND: <stream:error><invalid-from xmlns="urn:ietf:params:xml:ns:xmpp-streams"/></stream:error>
2018-03-30 17:27:42 โ„น๏ธ [INF] c2s:151 - unregistered stream... (id: jackal1.security-enforced.de:11)

Jackal seems to check the "from" which says "root@..." ... but because this user does not exist (yet) the stanza is declared invalid.

In-Band registration via Pidgin works fine.

XEP-0163: Personal Eventing Protocol; Planned support/accepting PR?

Hi there,

I've been thinking about building an XMPP server in go for a while, and I just found yours. I haven't looked at the code yet (will do soon) but it looks good and active, so I was wondering if you have reached a point on the project where pull requests are welcome (API is more or less consolidated, etc).

Currently I'm really interested in PEP, as it is a hard requirement for OMEMO which is a feature I'd need for my XMPP service. What do you think? Can I give it a try? If you think it's worth it, I could use a few lines explaining the project structure, like if it is module-based, if there are hooks, and where should I place the PEP-related code.

Regards and thanks for your time!

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.

xep0049/private:153 - pq: there is no unique or exclusion constraint matching the ON CONFLICT specification

Not sure if this is a jackal issue or an I don't understand postgres issue... Here's the log lines from immediately before the error.

๐Ÿ” [DBG] session/session:228 - RECV(c2s:default:2): <iq xmlns="jabber:client" type="set" id="2ae1ad12-5611-4eac-aee1-7835099e3d8b" from="[email protected]/gajim.ITKJ"><query xmlns="jabber:iq:private"><roster xmlns="roster:delimiter">::</roster></query></iq>
โ„น๏ธ [INF] xep0049/private:150 - saving private element. ns: roster:delimiter... (waveletlet/gajim.ITKJ)
๐Ÿ’ฅ [ERR] xep0049/private:153 - pq: there is no unique or exclusion constraint matching the ON CONFLICT specification

Pops up when I restart the server for every user that's online. Not seeing anything strange on the client side.

stringprep.h

xml/jid.go:13:24: fatal error: stringprep.h: No such file or directory

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::::
_____________
"
_____________

Need CGO for compile?

go get github.com/ortuman/jackal
# github.com/ortuman/jackal/xml
go/src/github.com/ortuman/jackal/xml/jid.go:13:10: fatal error: 'stringprep.h' file not found
#include "stringprep.h"
         ^~~~~~~~~~~~~~
1 error generated.

Add Tor support for c2s communication

Add an option to listen for incoming client connections via Tor hidden service.

Removed s2s for now as I'm not sure if this would even be possible currently.

Hash password

I think it is a good practice to save a user's password to the database encrypted instead of in plain text.

server: check permissions on TLS key and certificate at early state

When the server starts up and wrong permissions do not allow Jackal to access certificate and key, this happens:

2018-05-08 13:08:04 โ„น๏ธ [INF] main:99 - jackal 0.2.0

2018-05-08 13:08:04 โ„น๏ธ [INF] server:92 - default: listening at 0.0.0.0:5222 [transport: socket]
2018-05-08 13:08:13 โ„น๏ธ [INF] c2s:141 - registered stream... (id: default:1)
2018-05-08 13:08:13 ๐Ÿ” [DBG] c2s_stream:889 - RECV: <stream:stream to="localhost" version="1.0" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams"/>
2018-05-08 13:08:13 ๐Ÿ” [DBG] c2s_stream:937 - SEND: <?xml version="1.0"?><stream:stream xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" id="0cd01d9e-f756-4f05-9231-2b576113db77" from="jackal.local" version="1.0">
2018-05-08 13:08:13 ๐Ÿ” [DBG] c2s_stream:883 - SEND: <stream:error><host-unknown xmlns="urn:ietf:params:xml:ns:xmpp-streams"/></stream:error>
2018-05-08 13:08:13 โ„น๏ธ [INF] c2s:171 - unregistered stream... (id: default:1)
2018-05-08 13:08:20 โ„น๏ธ [INF] c2s:141 - registered stream... (id: default:2)
2018-05-08 13:08:20 ๐Ÿ” [DBG] c2s_stream:889 - RECV: <stream:stream to="jackal.local" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0"/>
2018-05-08 13:08:20 ๐Ÿ” [DBG] c2s_stream:937 - SEND: <?xml version="1.0"?><stream:stream xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" id="540748f0-628e-486e-8999-1aa8844c4eab" from="jackal.local" version="1.0">
2018-05-08 13:08:20 ๐Ÿ” [DBG] c2s_stream:883 - SEND: <stream:features xmlns:stream="http://etherx.jabber.org/streams" version="1.0"><starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"><required/></starttls></stream:features>
2018-05-08 13:08:20 ๐Ÿ” [DBG] c2s_stream:889 - RECV: <starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
2018-05-08 13:08:20 ๐Ÿ’ฅ [ERR] c2s_stream:516 - open /etc/jackal/jackal.local.key: permission denied
2018-05-08 13:08:20 ๐Ÿ” [DBG] c2s_stream:883 - SEND: <failure xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>

Maybe it's better to check permissions and validity of the certificates in a more early state, so Jackal can fail and return a error code immediately after startup. This would be more admin friendly ;-)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.