diff --git a/distrib/atheme/atheme2json.py b/distrib/atheme/atheme2json.py index 78768adc..b2971edf 100755 --- a/distrib/atheme/atheme2json.py +++ b/distrib/atheme/atheme2json.py @@ -140,14 +140,31 @@ def convert(infile): chdata['amode'][username] = 'h' elif 'v' in flags or 'V' in flags: chdata['amode'][username] = 'v' + elif 'S' in flags: + # take the first entry as the successor + if not chdata.get('successor'): + chdata['successor'] = username else: pass # do some basic integrity checks + def validate_user(name): + if not name: + return False + return bool(out['users'].get(name)) + + invalid_channels = [] + for chname, chdata in out['channels'].items(): - founder = chdata.get('founder') - if founder not in out['users']: - raise ValueError("no user corresponding to channel founder", chname, chdata.get('founder')) + if not validate_user(chdata.get('founder')): + if validate_user(chdata.get('successor')): + chdata['founder'] = chdata['successor'] + else: + invalid_channels.append(chname) + + for chname in invalid_channels: + logging.warning("Unable to find a valid founder for channel %s, discarding it", chname) + del out['channels'][chname] return out