3
0
mirror of https://github.com/jlu5/PyLink.git synced 2025-02-17 14:01:03 +01:00

relay: rename some internal functions to make more sense

getLocalUser => getOrigUser
findRemoteChan => getRemoteChan
findRelay => getRelay
This commit is contained in:
James Lu 2015-09-14 17:29:37 -07:00
parent 75de9c6be6
commit 81628f9a6d

View File

@ -215,7 +215,7 @@ def getRemoteUser(irc, remoteirc, user, spawnIfMissing=True):
relayusers[(irc.name, user)][remoteirc.name] = u relayusers[(irc.name, user)][remoteirc.name] = u
return u return u
def getLocalUser(irc, user, targetirc=None): def getOrigUser(irc, user, targetirc=None):
""" """
Given the UID of a relay client, returns a tuple of the home network name Given the UID of a relay client, returns a tuple of the home network name
and original UID of the user it was spawned for. and original UID of the user it was spawned for.
@ -227,7 +227,7 @@ def getLocalUser(irc, user, targetirc=None):
remoteuser = irc.users[user].remote remoteuser = irc.users[user].remote
except (AttributeError, KeyError): except (AttributeError, KeyError):
remoteuser = None remoteuser = None
log.debug('(%s) getLocalUser: remoteuser set to %r (looking up %s/%s).', log.debug('(%s) getOrigUser: remoteuser set to %r (looking up %s/%s).',
irc.name, remoteuser, user, irc.name) irc.name, remoteuser, user, irc.name)
if remoteuser: if remoteuser:
# If targetirc is given, we'll return simply the UID of the user on the # If targetirc is given, we'll return simply the UID of the user on the
@ -242,14 +242,14 @@ def getLocalUser(irc, user, targetirc=None):
# Otherwise, use getRemoteUser to find our UID. # Otherwise, use getRemoteUser to find our UID.
res = getRemoteUser(sourceobj, targetirc, remoteuser[1], res = getRemoteUser(sourceobj, targetirc, remoteuser[1],
spawnIfMissing=False) spawnIfMissing=False)
log.debug('(%s) getLocalUser: targetirc found, getting %r as ' log.debug('(%s) getOrigUser: targetirc found, getting %r as '
'remoteuser for %r (looking up %s/%s).', irc.name, res, 'remoteuser for %r (looking up %s/%s).', irc.name, res,
remoteuser[1], user, irc.name) remoteuser[1], user, irc.name)
return res return res
else: else:
return remoteuser return remoteuser
def findRelay(chanpair): def getRelay(chanpair):
"""Finds a matching relay for the given (network name, channel) pair.""" """Finds a matching relay for the given (network name, channel) pair."""
if chanpair in db: # This chanpair is a shared channel; others link to it if chanpair in db: # This chanpair is a shared channel; others link to it
return chanpair return chanpair
@ -258,12 +258,12 @@ def findRelay(chanpair):
if chanpair in dbentry['links']: if chanpair in dbentry['links']:
return name return name
def findRemoteChan(irc, remoteirc, channel): def getRemoteChan(irc, remoteirc, channel):
"""Returns the linked channel name for the given channel on remoteirc, """Returns the linked channel name for the given channel on remoteirc,
if one exists.""" if one exists."""
query = (irc.name, channel) query = (irc.name, channel)
remotenetname = remoteirc.name remotenetname = remoteirc.name
chanpair = findRelay(query) chanpair = getRelay(query)
if chanpair is None: if chanpair is None:
return return
if chanpair[0] == remotenetname: if chanpair[0] == remotenetname:
@ -277,7 +277,7 @@ def initializeChannel(irc, channel):
"""Initializes a relay channel (merge local/remote users, set modes, etc.).""" """Initializes a relay channel (merge local/remote users, set modes, etc.)."""
# We're initializing a relay that already exists. This can be done at # We're initializing a relay that already exists. This can be done at
# ENDBURST, or on the LINK command. # ENDBURST, or on the LINK command.
relay = findRelay((irc.name, channel)) relay = getRelay((irc.name, channel))
log.debug('(%s) initializeChannel being called on %s', irc.name, channel) log.debug('(%s) initializeChannel being called on %s', irc.name, channel)
log.debug('(%s) initializeChannel: relay pair found to be %s', irc.name, relay) log.debug('(%s) initializeChannel: relay pair found to be %s', irc.name, relay)
queued_users = [] queued_users = []
@ -294,7 +294,7 @@ def initializeChannel(irc, channel):
if remoteirc is None: if remoteirc is None:
continue continue
rc = remoteirc.channels[remotechan] rc = remoteirc.channels[remotechan]
if not (remoteirc.connected.is_set() and findRemoteChan(remoteirc, irc, remotechan)): if not (remoteirc.connected.is_set() and getRemoteChan(remoteirc, irc, remotechan)):
continue # They aren't connected, don't bother! continue # They aren't connected, don't bother!
# Join their (remote) users and set their modes. # Join their (remote) users and set their modes.
relayJoins(remoteirc, remotechan, rc.users, rc.ts) relayJoins(remoteirc, remotechan, rc.users, rc.ts)
@ -314,7 +314,7 @@ def removeChannel(irc, channel):
return return
if channel not in map(str.lower, irc.serverdata['channels']): if channel not in map(str.lower, irc.serverdata['channels']):
irc.proto.partClient(irc.pseudoclient.uid, channel, 'Channel delinked.') irc.proto.partClient(irc.pseudoclient.uid, channel, 'Channel delinked.')
relay = findRelay((irc.name, channel)) relay = getRelay((irc.name, channel))
if relay: if relay:
for user in irc.channels[channel].users.copy(): for user in irc.channels[channel].users.copy():
if not isRelayClient(irc, user): if not isRelayClient(irc, user):
@ -327,7 +327,7 @@ def removeChannel(irc, channel):
irc.proto.partClient(user, channel, 'Channel delinked.') irc.proto.partClient(user, channel, 'Channel delinked.')
# Don't ever quit it either... # Don't ever quit it either...
if user != irc.pseudoclient.uid and not irc.users[user].channels: if user != irc.pseudoclient.uid and not irc.users[user].channels:
remoteuser = getLocalUser(irc, user) remoteuser = getOrigUser(irc, user)
del relayusers[remoteuser][irc.name] del relayusers[remoteuser][irc.name]
irc.proto.quitClient(user, 'Left all shared channels.') irc.proto.quitClient(user, 'Left all shared channels.')
@ -342,7 +342,7 @@ def checkClaim(irc, channel, sender, chanobj=None):
4) No relay exists for the channel in question. 4) No relay exists for the channel in question.
5) The originating network is the one that created the relay. 5) The originating network is the one that created the relay.
""" """
relay = findRelay((irc.name, channel)) relay = getRelay((irc.name, channel))
try: try:
mlist = chanobj.prefixmodes mlist = chanobj.prefixmodes
except AttributeError: except AttributeError:
@ -406,7 +406,7 @@ def relayJoins(irc, channel, users, ts, burst=True):
if name == irc.name or not remoteirc.connected.is_set(): if name == irc.name or not remoteirc.connected.is_set():
# Don't relay things to their source network... # Don't relay things to their source network...
continue continue
remotechan = findRemoteChan(irc, remoteirc, channel) remotechan = getRemoteChan(irc, remoteirc, channel)
if remotechan is None: if remotechan is None:
# If there is no link on our network for the user, don't # If there is no link on our network for the user, don't
# bother spawning it. # bother spawning it.
@ -446,7 +446,7 @@ def relayPart(irc, channel, user):
if name == irc.name or not remoteirc.connected.is_set(): if name == irc.name or not remoteirc.connected.is_set():
# Don't relay things to their source network... # Don't relay things to their source network...
continue continue
remotechan = findRemoteChan(irc, remoteirc, channel) remotechan = getRemoteChan(irc, remoteirc, channel)
log.debug('(%s) relayPart: looking for %s/%s on %s', irc.name, user, irc.name, remoteirc.name) log.debug('(%s) relayPart: looking for %s/%s on %s', irc.name, user, irc.name, remoteirc.name)
log.debug('(%s) relayPart: remotechan found as %s', irc.name, remotechan) log.debug('(%s) relayPart: remotechan found as %s', irc.name, remotechan)
remoteuser = getRemoteUser(irc, remoteirc, user, spawnIfMissing=False) remoteuser = getRemoteUser(irc, remoteirc, user, spawnIfMissing=False)
@ -469,7 +469,7 @@ whitelisted_cmodes = {'admin', 'allowinvite', 'autoop', 'ban', 'banexception',
whitelisted_umodes = {'bot', 'hidechans', 'hideoper', 'invisible', 'oper', whitelisted_umodes = {'bot', 'hidechans', 'hideoper', 'invisible', 'oper',
'regdeaf', 'u_stripcolor', 'u_noctcp', 'wallops'} 'regdeaf', 'u_stripcolor', 'u_noctcp', 'wallops'}
def relayModes(irc, remoteirc, sender, channel, modes=None): def relayModes(irc, remoteirc, sender, channel, modes=None):
remotechan = findRemoteChan(irc, remoteirc, channel) remotechan = getRemoteChan(irc, remoteirc, channel)
log.debug('(%s) Relay mode: remotechan for %s on %s is %s', irc.name, channel, irc.name, remotechan) log.debug('(%s) Relay mode: remotechan for %s on %s is %s', irc.name, channel, irc.name, remotechan)
if remotechan is None: if remotechan is None:
return return
@ -506,7 +506,7 @@ def relayModes(irc, remoteirc, sender, channel, modes=None):
irc.name, modechar, arg, remoteirc.name) irc.name, modechar, arg, remoteirc.name)
# If the target is a remote user, get the real target # If the target is a remote user, get the real target
# (original user). # (original user).
arg = getLocalUser(irc, arg, targetirc=remoteirc) or \ arg = getOrigUser(irc, arg, targetirc=remoteirc) or \
getRemoteUser(irc, remoteirc, arg, spawnIfMissing=False) getRemoteUser(irc, remoteirc, arg, spawnIfMissing=False)
log.debug("(%s) Relay mode: argument found as (%r, %r) " log.debug("(%s) Relay mode: argument found as (%r, %r) "
"for network %r.", "for network %r.",
@ -547,7 +547,7 @@ def relayModes(irc, remoteirc, sender, channel, modes=None):
def relayWhoisHandler(irc, target): def relayWhoisHandler(irc, target):
user = irc.users[target] user = irc.users[target]
orig = getLocalUser(irc, target) orig = getOrigUser(irc, target)
if orig: if orig:
network, remoteuid = orig network, remoteuid = orig
remotenick = world.networkobjects[network].users[remoteuid].nick remotenick = world.networkobjects[network].users[remoteuid].nick
@ -568,7 +568,7 @@ utils.add_hook(handle_operup, 'PYLINK_CLIENT_OPERED')
def handle_join(irc, numeric, command, args): def handle_join(irc, numeric, command, args):
channel = args['channel'] channel = args['channel']
if not findRelay((irc.name, channel)): if not getRelay((irc.name, channel)):
# No relay here, return. # No relay here, return.
return return
ts = args['ts'] ts = args['ts']
@ -621,7 +621,7 @@ def handle_part(irc, numeric, command, args):
for channel in channels: for channel in channels:
for netname, user in relayusers[(irc.name, numeric)].copy().items(): for netname, user in relayusers[(irc.name, numeric)].copy().items():
remoteirc = world.networkobjects[netname] remoteirc = world.networkobjects[netname]
remotechan = findRemoteChan(irc, remoteirc, channel) remotechan = getRemoteChan(irc, remoteirc, channel)
if remotechan is None: if remotechan is None:
continue continue
remoteirc.proto.partClient(user, remotechan, text) remoteirc.proto.partClient(user, remotechan, text)
@ -636,7 +636,7 @@ def handle_privmsg(irc, numeric, command, args):
text = args['text'] text = args['text']
if target == irc.pseudoclient.uid: if target == irc.pseudoclient.uid:
return return
relay = findRelay((irc.name, target)) relay = getRelay((irc.name, target))
remoteusers = relayusers[(irc.name, numeric)] remoteusers = relayusers[(irc.name, numeric)]
# HACK: Don't break on sending to @#channel or similar. # HACK: Don't break on sending to @#channel or similar.
try: try:
@ -657,7 +657,7 @@ def handle_privmsg(irc, numeric, command, args):
if utils.isChannel(target): if utils.isChannel(target):
for netname, user in relayusers[(irc.name, numeric)].items(): for netname, user in relayusers[(irc.name, numeric)].items():
remoteirc = world.networkobjects[netname] remoteirc = world.networkobjects[netname]
real_target = findRemoteChan(irc, remoteirc, target) real_target = getRemoteChan(irc, remoteirc, target)
if not real_target: if not real_target:
continue continue
real_target = prefix + real_target real_target = prefix + real_target
@ -666,7 +666,7 @@ def handle_privmsg(irc, numeric, command, args):
else: else:
remoteirc.proto.messageClient(user, real_target, text) remoteirc.proto.messageClient(user, real_target, text)
else: else:
remoteuser = getLocalUser(irc, target) remoteuser = getOrigUser(irc, target)
if remoteuser is None: if remoteuser is None:
return return
homenet, real_target = remoteuser homenet, real_target = remoteuser
@ -693,15 +693,15 @@ def handle_kick(irc, source, command, args):
target = args['target'] target = args['target']
text = args['text'] text = args['text']
kicker = source kicker = source
relay = findRelay((irc.name, channel)) relay = getRelay((irc.name, channel))
# Don't allow kicks to the PyLink client to be relayed. # Don't allow kicks to the PyLink client to be relayed.
if relay is None or target == irc.pseudoclient.uid: if relay is None or target == irc.pseudoclient.uid:
return return
origuser = getLocalUser(irc, target) origuser = getOrigUser(irc, target)
for name, remoteirc in world.networkobjects.items(): for name, remoteirc in world.networkobjects.items():
if irc.name == name or not remoteirc.connected.is_set(): if irc.name == name or not remoteirc.connected.is_set():
continue continue
remotechan = findRemoteChan(irc, remoteirc, channel) remotechan = getRemoteChan(irc, remoteirc, channel)
log.debug('(%s) Relay kick: remotechan for %s on %s is %s', irc.name, channel, name, remotechan) log.debug('(%s) Relay kick: remotechan for %s on %s is %s', irc.name, channel, name, remotechan)
if remotechan is None: if remotechan is None:
continue continue
@ -717,7 +717,7 @@ def handle_kick(irc, source, command, args):
log.debug('(%s) Relay kick: real target for %s is %s', irc.name, target, real_target) log.debug('(%s) Relay kick: real target for %s is %s', irc.name, target, real_target)
else: else:
log.debug('(%s) Relay kick: target %s is an internal client, going to look up the real user', irc.name, target) log.debug('(%s) Relay kick: target %s is an internal client, going to look up the real user', irc.name, target)
real_target = getLocalUser(irc, target, targetirc=remoteirc) real_target = getOrigUser(irc, target, targetirc=remoteirc)
if not checkClaim(irc, channel, kicker): if not checkClaim(irc, channel, kicker):
log.debug('(%s) Relay kick: kicker %s is not opped... We should rejoin the target user %s', irc.name, kicker, real_target) log.debug('(%s) Relay kick: kicker %s is not opped... We should rejoin the target user %s', irc.name, kicker, real_target)
# Home network is not in the channel's claim AND the kicker is not # Home network is not in the channel's claim AND the kicker is not
@ -839,7 +839,7 @@ def handle_topic(irc, numeric, command, args):
if irc.name == name or not remoteirc.connected.is_set(): if irc.name == name or not remoteirc.connected.is_set():
continue continue
remotechan = findRemoteChan(irc, remoteirc, channel) remotechan = getRemoteChan(irc, remoteirc, channel)
# Don't send if the remote topic is the same as ours. # Don't send if the remote topic is the same as ours.
if remotechan is None or topic == remoteirc.channels[remotechan].topic: if remotechan is None or topic == remoteirc.channels[remotechan].topic:
continue continue
@ -858,7 +858,7 @@ utils.add_hook(handle_topic, 'TOPIC')
def handle_kill(irc, numeric, command, args): def handle_kill(irc, numeric, command, args):
target = args['target'] target = args['target']
userdata = args['userdata'] userdata = args['userdata']
realuser = getLocalUser(irc, target) or userdata.__dict__.get('remote') realuser = getOrigUser(irc, target) or userdata.__dict__.get('remote')
log.debug('(%s) relay handle_kill: realuser is %r', irc.name, realuser) log.debug('(%s) relay handle_kill: realuser is %r', irc.name, realuser)
# Target user was remote: # Target user was remote:
if realuser and realuser[0] != irc.name: if realuser and realuser[0] != irc.name:
@ -868,7 +868,7 @@ def handle_kill(irc, numeric, command, args):
if killcache.setdefault(irc.name, 0) <= 5: if killcache.setdefault(irc.name, 0) <= 5:
remoteirc = world.networkobjects[realuser[0]] remoteirc = world.networkobjects[realuser[0]]
for remotechan in remoteirc.channels.copy(): for remotechan in remoteirc.channels.copy():
localchan = findRemoteChan(remoteirc, irc, remotechan) localchan = getRemoteChan(remoteirc, irc, remotechan)
if localchan: if localchan:
modes = getPrefixModes(remoteirc, irc, localchan, realuser[1]) modes = getPrefixModes(remoteirc, irc, localchan, realuser[1])
log.debug('(%s) relay handle_kill: userpair: %s, %s', irc.name, modes, realuser) log.debug('(%s) relay handle_kill: userpair: %s, %s', irc.name, modes, realuser)
@ -920,9 +920,9 @@ def handle_invite(irc, source, command, args):
target = args['target'] target = args['target']
channel = args['channel'] channel = args['channel']
if isRelayClient(irc, target): if isRelayClient(irc, target):
remotenet, remoteuser = getLocalUser(irc, target) remotenet, remoteuser = getOrigUser(irc, target)
remoteirc = world.networkobjects[remotenet] remoteirc = world.networkobjects[remotenet]
remotechan = findRemoteChan(irc, remoteirc, channel) remotechan = getRemoteChan(irc, remoteirc, channel)
remotesource = getRemoteUser(irc, remoteirc, source, spawnIfMissing=False) remotesource = getRemoteUser(irc, remoteirc, source, spawnIfMissing=False)
if remotesource is None: if remotesource is None:
irc.msg(source, 'Error: You must be in a common channel ' irc.msg(source, 'Error: You must be in a common channel '
@ -961,7 +961,7 @@ utils.add_hook(handle_disconnect, "PYLINK_DISCONNECT")
def handle_save(irc, numeric, command, args): def handle_save(irc, numeric, command, args):
target = args['target'] target = args['target']
realuser = getLocalUser(irc, target) realuser = getOrigUser(irc, target)
log.debug('(%s) relay handle_save: %r got in a nick collision! Real user: %r', log.debug('(%s) relay handle_save: %r got in a nick collision! Real user: %r',
irc.name, target, realuser) irc.name, target, realuser)
if isRelayClient(irc, target) and realuser: if isRelayClient(irc, target) and realuser:
@ -1072,7 +1072,7 @@ def link(irc, source, args):
if remotenet not in world.networkobjects: if remotenet not in world.networkobjects:
irc.msg(source, 'Error: No network named %r exists.' % remotenet) irc.msg(source, 'Error: No network named %r exists.' % remotenet)
return return
localentry = findRelay((irc.name, localchan)) localentry = getRelay((irc.name, localchan))
if localentry: if localentry:
irc.msg(source, 'Error: Channel %r is already part of a relay.' % localchan) irc.msg(source, 'Error: Channel %r is already part of a relay.' % localchan)
return return
@ -1116,7 +1116,7 @@ def delink(irc, source, args):
if not utils.isChannel(channel): if not utils.isChannel(channel):
irc.msg(source, 'Error: Invalid channel %r.' % channel) irc.msg(source, 'Error: Invalid channel %r.' % channel)
return return
entry = findRelay((irc.name, channel)) entry = getRelay((irc.name, channel))
if entry: if entry:
if entry[0] == irc.name: # We own this channel. if entry[0] == irc.name: # We own this channel.
if not remotenet: if not remotenet:
@ -1174,7 +1174,7 @@ def linkacl(irc, source, args):
if not utils.isChannel(channel): if not utils.isChannel(channel):
irc.msg(source, 'Error: Invalid channel %r.' % channel) irc.msg(source, 'Error: Invalid channel %r.' % channel)
return return
relay = findRelay((irc.name, channel)) relay = getRelay((irc.name, channel))
if not relay: if not relay:
irc.msg(source, 'Error: No such relay %r exists.' % channel) irc.msg(source, 'Error: No such relay %r exists.' % channel)
return return
@ -1215,7 +1215,7 @@ def showuser(irc, source, args):
u = utils.nickToUid(irc, target) u = utils.nickToUid(irc, target)
if u: if u:
try: try:
userpair = getLocalUser(irc, u) or (irc.name, u) userpair = getOrigUser(irc, u) or (irc.name, u)
remoteusers = relayusers[userpair].items() remoteusers = relayusers[userpair].items()
except KeyError: except KeyError:
pass pass
@ -1231,7 +1231,7 @@ def showuser(irc, source, args):
irc.msg(source, "\x02Relay nicks\x02: %s" % ', '.join(nicks)) irc.msg(source, "\x02Relay nicks\x02: %s" % ', '.join(nicks))
relaychannels = [] relaychannels = []
for ch in irc.users[u].channels: for ch in irc.users[u].channels:
relay = findRelay((irc.name, ch)) relay = getRelay((irc.name, ch))
if relay: if relay:
relaychannels.append(''.join(relay)) relaychannels.append(''.join(relay))
if relaychannels and (utils.isOper(irc, source) or u == source): if relaychannels and (utils.isOper(irc, source) or u == source):