Mercurial > prosody-modules
view mod_tcpproxy/web/xmpp.io.js @ 5682:527c747711f3
mod_http_oauth2: Limit revocation to clients own tokens in strict mode
RFC 7009 section 2.1 states:
> The authorization server first validates the client credentials (in
> case of a confidential client) and then verifies whether the token was
> issued to the client making the revocation request. If this
> validation fails, the request is refused and the client is informed of
> the error by the authorization server as described below.
The first part was already covered (in strict mode). This adds the later
part using the hash of client_id recorded in 0860497152af
It still seems weird to me that revoking a leaked token should not be
allowed whoever might have discovered it, as that seems the responsible
thing to do.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 29 Oct 2023 11:30:49 +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()})); } };