@@ -0,0 +1,49 @@
|
||||
/** SASL PLAIN (IRCv3). No import. */
|
||||
|
||||
function bareIrcB64Encode(bytes) {
|
||||
var table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
|
||||
var s = ''
|
||||
var i = 0
|
||||
while (i < bytes.length) {
|
||||
var a = bytes[i++]
|
||||
var b = i < bytes.length ? bytes[i++] : NaN
|
||||
var c = i < bytes.length ? bytes[i++] : NaN
|
||||
var triple =
|
||||
((a & 255) << 16) |
|
||||
((Number.isFinite(b) ? b & 255 : 0) << 8) |
|
||||
(Number.isFinite(c) ? c & 255 : 0)
|
||||
s += table.charAt((triple >> 18) & 63)
|
||||
s += table.charAt((triple >> 12) & 63)
|
||||
s += Number.isFinite(b) ? table.charAt((triple >> 6) & 63) : '='
|
||||
s += Number.isFinite(c) ? table.charAt(triple & 63) : '='
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
function bareIrcUtf8Bytes(str) {
|
||||
var s = String(str == null ? '' : str)
|
||||
if (typeof TextEncoder !== 'undefined')
|
||||
return Array.from(new TextEncoder().encode(s))
|
||||
var out = []
|
||||
for (var i = 0; i < s.length; i++) out.push(s.charCodeAt(i) & 255)
|
||||
return out
|
||||
}
|
||||
|
||||
/**
|
||||
* AUTHENTICATE PLAIN payload (account \0 account \0 password), chunked ≤400.
|
||||
* @returns {string[]}
|
||||
*/
|
||||
function bareIrcSaslPlainChunks(user, pass) {
|
||||
var u = String(user || '')
|
||||
var p = String(pass || '')
|
||||
var raw = bareIrcUtf8Bytes('\0' + u + '\0' + p)
|
||||
var b64 = bareIrcB64Encode(raw)
|
||||
var chunks = []
|
||||
var i = 0
|
||||
if (!b64) return ['+']
|
||||
while (i < b64.length) {
|
||||
chunks.push(b64.slice(i, i + 400))
|
||||
i += 400
|
||||
}
|
||||
return chunks
|
||||
}
|
||||
Reference in New Issue
Block a user