@@ -1,5 +1,29 @@
|
||||
/** Libera defaults + ~/.irc config/secrets. */
|
||||
|
||||
function bareIrcRandomSuffix(n) {
|
||||
var alphabet = 'abcdefghijkmnpqrstuvwxyz23456789'
|
||||
var out = ''
|
||||
var i
|
||||
var len = n > 0 ? n : 4
|
||||
for (i = 0; i < len; i++) {
|
||||
out += alphabet.charAt(Math.floor(Math.random() * alphabet.length))
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
function bareIrcRandomNick() {
|
||||
return ('os' + bareIrcRandomSuffix(5)).slice(0, 16)
|
||||
}
|
||||
|
||||
function bareIrcNickLooksMachine(nick) {
|
||||
var s = String(nick || '')
|
||||
if (!s) return true
|
||||
if (/^[0-9a-f]{8,16}$/i.test(s)) return true
|
||||
if (/^[0-9a-f]{12}$/i.test(s)) return true
|
||||
if (/^[a-z0-9]{10,}-[a-z0-9]{4,}$/i.test(s)) return true
|
||||
return false
|
||||
}
|
||||
|
||||
function bareIrcHostLooksLibera(host) {
|
||||
var h = String(host || '')
|
||||
.trim()
|
||||
@@ -127,13 +151,16 @@ function bareIrcResolveConnect(ctx, flags, loaded) {
|
||||
if (host === 'libera') host = BARE_IRC_LIBERA.host
|
||||
var port = flags.port != null ? flags.port : srv.port || BARE_IRC_LIBERA.port
|
||||
var tls = flags.tls != null ? flags.tls : srv.tls !== false
|
||||
var nick =
|
||||
flags.nick ||
|
||||
cfg.nick ||
|
||||
env.BARE_IRC_NICK ||
|
||||
env.USER ||
|
||||
env.LOGNAME ||
|
||||
'bareos'
|
||||
var nick = flags.nick || cfg.nick || env.BARE_IRC_NICK || ''
|
||||
var generatedNick = false
|
||||
if (!nick) {
|
||||
var candidate = env.USER || env.LOGNAME || ''
|
||||
if (candidate && !bareIrcNickLooksMachine(candidate)) nick = candidate
|
||||
}
|
||||
if (!nick) {
|
||||
nick = bareIrcRandomNick()
|
||||
generatedNick = true
|
||||
}
|
||||
var saslUser = flags.saslUser || cfg.saslUser || sec.saslUser || ''
|
||||
var saslPass = flags.saslPass != null ? flags.saslPass : sec.saslPass || ''
|
||||
var autojoin = Array.isArray(flags.autojoin)
|
||||
@@ -146,7 +173,8 @@ function bareIrcResolveConnect(ctx, flags, loaded) {
|
||||
port: port,
|
||||
tls: tls,
|
||||
insecurePlain: !!flags.insecurePlain,
|
||||
nick: String(nick).slice(0, 32),
|
||||
nick: String(nick).slice(0, 16),
|
||||
generatedNick: generatedNick,
|
||||
username: flags.username || cfg.username || 'bareos',
|
||||
realname: flags.realname || cfg.realname || 'Bare OS irc',
|
||||
pass: flags.pass || sec.serverPass || '',
|
||||
@@ -202,3 +230,26 @@ function bareIrcParseFlags(argv) {
|
||||
}
|
||||
return flags
|
||||
}
|
||||
|
||||
async function bareIrcRememberNick(ctx, nick) {
|
||||
var n = String(nick || '').trim()
|
||||
if (!n) return false
|
||||
if (!ctx || !ctx.vfs || typeof ctx.vfs.writeFile !== 'function') return false
|
||||
var paths = bareIrcConfigPaths(ctx)
|
||||
var loaded = await bareIrcLoadConfig(ctx)
|
||||
var cfg = loaded.config || {}
|
||||
if (cfg.nick) return false
|
||||
cfg.nick = n
|
||||
try {
|
||||
if (typeof ctx.vfs.mkdir === 'function') {
|
||||
var mk = ctx.vfs.mkdir(paths.dir, { recursive: true })
|
||||
if (mk && typeof mk.then === 'function') await mk
|
||||
}
|
||||
var body = JSON.stringify(cfg, null, 2)
|
||||
var w = ctx.vfs.writeFile(paths.config, body)
|
||||
if (w && typeof w.then === 'function') await w
|
||||
return true
|
||||
} catch (e) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user