Technik

Sept. 8, 2018

Converse.js with prosody

Since the latest release (4.0.0), converse.js supports OMEMO. With OMEMO and MAM (server side message archive to show older chatlogs), it seems to be now a really nice client for everyday usage.

But deploying it isn't as easy as one might think. Here a short summary what I needed to do to get BOSH and HTTP file upload working together with an own prosody XMPP server.

By default the prosody BOSH (Jabber over HTTP) server listens on port 5280 and 5281 for unencrypted respectively TLS connections.
When converse.js is installed on a webserver, the website at port 80 (HTTP) / 443 (HTTPS) is considered as another origin by the browser, so it will not allow access to the BOSH server.
The BOSH server can allow such an access by setting a cross-origin resource sharing header (CORS).

The problem is, that setting the header is not yet implemented in prosody.

To fix this, here is an easy patch for the net/http/server.lua file from prosody:

To allow access from any website, change the line

headers = { date = date_header, connection = response_conn_header };

to

headers = { date = date_header, connection = response_conn_header, 
            access_control_allow_origin = "*" };

This solves the problem to access the BOSH server, but HTTP file upload will still have problems.


HTTP file upload uses the PUT method on the server, with the new filename, which does not exist, yet.
A CORS-request by the browser before the upload results in an error 404 (File not found) and fails even when the correct header is set, so no upload is attempted.
This means the cross-origin header solution does not allow for working file transfers.

To solve the problem, we can use a reverse proxy to have the BOSH and HTTP-upload URLs on the same domain (and port) as the converse.js installation.
The patch for sending the cross-origin resource sharing header above is no longer needed with this solution, as everything will now run on the same domain and port.

For nginx, I use the following reverse proxy configuration for the vHost CONVERSE_DOMAIN at which converse.js is hosted:

# BOSH
location ^~ /http-bind {
    proxy_pass "https://PROSODY_SERVER:5281/http-bind";
    proxy_http_version 1.1;
    proxy_set_header Host JABBER_DOMAIN;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_buffering off;
    tcp_nodelay on; 
}
# HTTP-Upload
location ^~ /upload {
    proxy_pass "https://PROSODY_SERVER:5281/upload";
    proxy_http_version 1.1;
    proxy_set_header Host JABBER_DOMAIN;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_buffering off;
    tcp_nodelay on; 
}

where JABBER_DOMAIN needs to be the appropriate vHost in prosody, i.e. the part after the @ in the jabber IDs, and PROSODY_SERVER is the IP or hostname where nginx can access the prosody server.

In prosody, the following configuration is needed

# Consider internal non-https connections as external https connections
consider_bosh_secure = true;
# Allow requests from other domains than the @server part of the jabber IDs
cross_domain_bosh = true;
# Base URL used to generate HTTP-upload URLs
http_external_url = "https://CONVERSE_DOMAIN/"

This configuration makes prosody accept connections from nginx, even when the internal connection does not use HTTPS and sets the base URL which is used to construct URLs for file uploads to the external address of the reverse proxy.

You can now firewall the prosody HTTP-server, as BOSH and HTTP file upload should only need access the nginx HTTP server.

Kategorien Tipps Software Technik
Tagged prosody converse.js converse nginx reverse proxy OMEMO MAM Jabber
Mobil qrcode zeigen

0 Kommentare

Mai 1, 2011

Linuxhardware: Edimax EW-7711In

Die WLAN-Karte Edimax EW-7711In funktioniert unter Linux (Ubuntu Distribution), allerdings NICHT ohne manuelles nachhelfen.

lspci Ausgabe: Network controller: RaLink Device 3060

Treiber:

  • rt2800 (default)
  • rt3562sta

Ubuntu versucht standardmäßig den rt2800 Treiber zu verwenden, hat dann aber folgenden Fehler:

phy0 -> rt2800pci_mcu_status: Error - MCU request failed, no response from hardware

Den rt3562sta-Treiber bekommt man unter http://www.ralinktech.com/en/04_support/support.php?sn=501 (Treiberpaket das u.a. RT3060 enthält herunterladen) und muss ihn selber kompilieren.

Geklappt hat das nach der Anleitung von Ubuntuusers.de und funktioniert jetzt auch ohne weitere Probleme.

Kategorien Hardware Technik
Tagged
Mobil qrcode zeigen

0 Kommentare

Aug. 19, 2008

Links 43

Kategorien Technik Links
Tagged Polizei Suche Kinder Vorratsdatenspeicherung OOXML Kundendaten fett Eltern ISO Bewerber Datenklau GAU
Mobil qrcode zeigen

0 Kommentare

Dez. 31, 2007

der frühe Vogel kann mich mal

  • klopapier rauchen warum sollte man
  • harry potter porno keller
  • wann kommt denn euer jesus endlich?
  • leben frauen länger weil sie ihre tage haben?
  • wie kann mann telefonzellen für einen mieten
  • ist das der pawlowsche hund?
  • hatte hitler führerschein
  • wer ist ein prophet, der heute noch lebt?
Diese und noch viele andere Suchanfragen sammelt der SearchRequest-Blog. Sehr gute Unterhaltung, bei manchen Anfragen zweifelt man allerdings am Geisteszustand des Suchenden.

Kategorien Medien Fun Technik Suchworte
Tagged Google Suche Suchanfragen Wörter
Mobil qrcode zeigen

0 Kommentare

Dez. 1, 2007

Privatssphäre im IRC oder Volltextsuche?

Gerade im IRC darauf hingewiesen worden: Unter irseek.com können komplette Chats nach Stichwörtern durchsucht werden. Woher die Volltexte stammen ist auf der Seite nicht angegeben, ebensowenig ob und wie man sich dagegen wehren kann dort zu erscheinen.
Inside the conversation window, you can highlight a certain user (or users), by clicking on their nickname in order to help you track a certain conversation. (von der Hilfe-Seite)
Die Seite, die sich selber als Hilfe-Datenbank versteht bringt damit die Chats von unzähligen Personen die absolut gar nichts davon wissen zusammen. Mit ein paar Stichproben konnte ich schon diverse Channel wie #linux, #ubuntu(diese natürlich in diversen Netzen), #chaosradio, #camp, ... finden.

Über die Technik steht auf der Seite nichts, aber es wird sich vermutlich um einen Bot handeln, da unwahrscheinlich ist, dass sie mit so vielen Netzbetreibern zusammenarbeiten. Wenn jemand weiß wie der Bot heißt, bzw. wie er zu identifizieren ist, wenn er sich nicht zu erkennen gibt, würde ich mich über einen Kommentar mit dem Hinweis freuen.

Neben der verletzten Privatsspähre wird natürlich auch das Copyright der Personen die sich eigentlich nur in einem Chat äußern wollten verletzt. Bleibt abzuwarten wann es die ersten Klagen gegen die Seite gibt.

[UPDATE] Aus dem IRC:

<...> nach nachforschungen in channel-logs mehrere channels hat sich ergeben, dass es vermutlich bots sind, die sich über tor verbinden, unterschiedliche nicks haben und immer einen zweistelligen benutzernamen vor dem @gateway/tor/ tragen

[Global Notice] Hi all! To those of you relying on tor for connections to freenode I am terribly sorry to inform you that non tor-gpg (http://freenode.net/irc_servers.shtml#tor) connections have been blocked. This block may be in place for at least a number of days while we try to deal with systematic abuse. Again, I apologise for the inconvenience and hope that we will find a solution soon. Thank you for using freenode and have a good day

Die "CTCP VERSION" gibt die Bots als mirc aus. Entweder möchte hier jemand verbergen dass es sich um Bots handelt, oder es wird tatsächlich mirc, dann vermutlich mit passenden Scripts zum loggen benutzt.

Einen Chat für die Opfer(bisher ohne IRSeek Bot) gibts im freenode in #irseek-victims und #irseek-victims-de

Links:

Kategorien Überwachung Anonymität Datenschutz Recht Technik
Tagged Urheberrecht Daten IRC Volltext Suche Logs Chat
Mobil qrcode zeigen

4 Kommentare