Mercurial > prosody-modules
view mod_tcpproxy/web/xmpp.io.js @ 5186:fa3059e653fa
mod_http_oauth2: Implement the Implicit flow
Everyone says this is insecure and bad, but it's also the only thing
that makes sense for e.g. pure JavaScript clients, but hey implement
this even more complicated thing instead!
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 02 Mar 2023 22:06:50 +0100 |
parents | 7dbde05b48a9 |
children |
line wrap: on
line source
var xmlns_ibb = "http://jabber.org/protocol/ibb"; var xmlns_tcp = "http://prosody.im/protocol/tcpproxy"; function XMPPIO(xmppconn, xmpptcp_host) { this.xmppconn = xmppconn; this.xmpphost = xmpptcp_host; this.sid = "FIXME"; this.listeners = []; return this; } XMPPIO.prototype = { connect: function (host, port) { var conn = this; console.log("Connecting..."); function onConnect() { this.xmppconn.addHandler(function (stanza) { var data = stanza.getElementsByTagName("data")[0]; if(data) conn.emit("data", Strophe.Base64.decode(Strophe.getText(data))); }, null, "message", null, null, this.xmpphost, {}); this.xmppconn.addHandler(function (stanza) { var data = stanza.getElementsByTagName("close")[0]; if(close) { conn.write = function () { throw "Connection closed"; }; conn.emit("end"); } }, xmlns_ibb, "iq", "set", null, this.xmpphost, {}); conn.emit("connect"); } this.xmppconn.sendIQ($iq({to:this.xmpphost,type:"set"}) .c("open", { "xmlns": xmlns_ibb, "xmlns:tcp": xmlns_tcp, "tcp:host": host, "tcp:port": port.toString(), "block-size": "4096", "sid": this.sid.toString(), "stanza": "message" }), onConnect, function () { conn.emit("error"); }); }, emit: function () { console.log("xmpp.io: Emitting "+arguments[0]); var args = Array.prototype.slice.call(arguments, 1); var listeners = this.listeners[arguments[0]]; if(listeners) { for(var i=0;i<listeners.length;i++) { listeners[i][1].apply(listeners[i][0], args); } } }, addListener: function (event, method, obj) { if(typeof(obj)=="undefined") obj = this; if(!(event in this.listeners)) this.listeners[event] = []; this.listeners[event].push([obj, method]); }, write: function (data) { return this.xmppconn.send($msg({to:this.xmpphost}) .c("data", {xmlns:xmlns_ibb, sid:this.sid.toString()}) .t(Strophe.Base64.encode(data))); }, end: function () { return this.xmppconn.send($iq({to:this.xmpphost}) .c("close", {xmlns:xmlns_ibb, sid:this.sid.toString()})); } };