Handle multiple profiles
This commit is contained in:
parent
3ab429628a
commit
45e6d2fb3e
1 changed files with 86 additions and 73 deletions
143
tox_savefile.py
143
tox_savefile.py
|
@ -7,22 +7,22 @@ Call it with one argument, the filename of the profile for the decrypt or info
|
|||
commands, or the filename of the nodes file for the nodes command.
|
||||
|
||||
4 commands are supported:
|
||||
--command decrypt
|
||||
decrypts the profile and writes to the result to stdout
|
||||
|
||||
--command info
|
||||
--command info - default
|
||||
prints info about what's in the Tox profile to stderr
|
||||
|
||||
--command nodes
|
||||
assumes you are reading a json nodes file instead of a profile
|
||||
|
||||
--command decrypt
|
||||
decrypts the profile and writes to the result to stdout
|
||||
|
||||
--command edits
|
||||
edits fields in a Tox profile with --output to a file
|
||||
|
||||
"""
|
||||
|
||||
"""
|
||||
--output Destination for info/decrypt/edit/nodes/download
|
||||
--output Destination for info/decrypt/edit/nodes
|
||||
--info default='info',
|
||||
choices=[info, save, repr, yaml,json, pprint]
|
||||
with --info=info prints info about the profile to stderr
|
||||
|
@ -293,9 +293,17 @@ def lProcessGroups(state, index, length, result, label="GROUPS"):
|
|||
LOG.warn(f"lProcessGroups #{i} topic_info is None")
|
||||
else:
|
||||
assert len(topic_info) == 6, topic_info
|
||||
topic_info_topic = str(topic_info[3], sENC)
|
||||
version, \
|
||||
length, \
|
||||
checksum, \
|
||||
topic, \
|
||||
public_sig_key \
|
||||
topic_sig = topic_info
|
||||
|
||||
topic_info_topic = str(topic, sENC)
|
||||
LOG.info(f"lProcessGroups #{i} topic_info_topic={topic_info_topic}")
|
||||
dBINS = {"topic_info_topic": topic_info_topic}
|
||||
dBINS = {"Topic_info_topic": topic_info_topic
|
||||
}
|
||||
lIN += [{"Topic_info": dBINS}]
|
||||
|
||||
if mod_list is None:
|
||||
|
@ -485,9 +493,9 @@ def process_chunk(index, state, oArgs=None):
|
|||
nospam = bin_to_hex(result[0:4])
|
||||
public_key = bin_to_hex(result[4:36])
|
||||
private_key = bin_to_hex(result[36:68])
|
||||
LOG.info(f"nospam = {nospam}")
|
||||
LOG.info(f"public_key = {public_key}")
|
||||
LOG.info(f"private_key = {private_key}")
|
||||
LOG.info(f"{label} Nospam = {nospam}")
|
||||
LOG.info(f"{label} Public_key = {public_key}")
|
||||
LOG.info(f"{label} Private_key = {private_key}")
|
||||
aIN = {"Nospam": f"{nospam}",
|
||||
"Public_key": f"{public_key}",
|
||||
"Private_key": f"{private_key}"}
|
||||
|
@ -749,65 +757,13 @@ def vSetupLogging(loglevel=logging.DEBUG):
|
|||
logging._defaultFormatter.default_time_format = '%m-%d %H:%M:%S'
|
||||
logging._defaultFormatter.default_msec_format = ''
|
||||
|
||||
def oMainArgparser(_=None):
|
||||
if not os.path.exists('/proc/sys/net/ipv6'):
|
||||
bIpV6 = 'False'
|
||||
else:
|
||||
bIpV6 = 'True'
|
||||
lIpV6Choices=[bIpV6, 'False']
|
||||
def iMain(sFile, oArgs):
|
||||
global bOUT, aOUT, sENC
|
||||
global bSAVE
|
||||
|
||||
parser = argparse.ArgumentParser(epilog=__doc__)
|
||||
# list(dSTATE_TYPE.values())
|
||||
# ['nospamkeys', 'dht', 'friends', 'name', 'statusmessage', 'status', 'groups', 'tcp_relay', 'path_node', 'conferences']
|
||||
|
||||
parser.add_argument('--output', type=str, default='',
|
||||
help='Destination for info/decrypt - defaults to stderr')
|
||||
parser.add_argument('--command', type=str, default='info',
|
||||
choices=['info', 'decrypt', 'nodes', 'edit'],
|
||||
required=True,
|
||||
help='Action command - default: info')
|
||||
# nargs='+',
|
||||
parser.add_argument('--edit', type=str, default='',
|
||||
help='comma seperated SECTION,num,key,value - or help for ')
|
||||
parser.add_argument('--indent', type=int, default=2,
|
||||
help='Indent for yaml/json/pprint')
|
||||
choices=['info', 'save', 'repr', 'yaml','json', 'pprint']
|
||||
if bHAVE_NMAP: choices += ['nmap_tcp', 'nmap_udp', 'nmap_onion']
|
||||
parser.add_argument('--info', type=str, default='info',
|
||||
choices=choices,
|
||||
help='Format for info command')
|
||||
choices = []
|
||||
if bHAVE_JQ:
|
||||
choices += ['select_tcp', 'select_udp', 'select_version']
|
||||
if bHAVE_NMAP: choices += ['nmap_tcp', 'nmap_udp']
|
||||
if download_url:
|
||||
choices += ['download']
|
||||
parser.add_argument('--nodes', type=str, default='',
|
||||
choices=choices,
|
||||
help='Action for nodes command (requires jq)')
|
||||
parser.add_argument('--download_nodes_url', type=str,
|
||||
default='https://nodes.tox.chat/json')
|
||||
parser.add_argument('--encoding', type=str, default=sENC)
|
||||
parser.add_argument('profile', type=str, nargs='?', default=None,
|
||||
help='tox profile file - may be encrypted')
|
||||
return parser
|
||||
|
||||
if __name__ == '__main__':
|
||||
lArgv = sys.argv[1:]
|
||||
parser = oMainArgparser()
|
||||
oArgs = parser.parse_args(lArgv)
|
||||
if oArgs.command in ['edit'] and oArgs.edit == 'help':
|
||||
l = list(dSTATE_TYPE.values())
|
||||
l.remove('END')
|
||||
print('Available Sections: ' +repr(l))
|
||||
print('Supported Quads: section,num,key,type ' +sEDIT_HELP)
|
||||
sys.exit(0)
|
||||
|
||||
sFile = oArgs.profile
|
||||
assert os.path.isfile(sFile), sFile
|
||||
|
||||
sENC = oArgs.encoding
|
||||
vSetupLogging()
|
||||
|
||||
bSAVE = open(sFile, 'rb').read()
|
||||
if ToxEncryptSave and bSAVE[:8] == b'toxEsave':
|
||||
|
@ -963,4 +919,61 @@ if __name__ == '__main__':
|
|||
if oStream and oStream != sys.stdout and oStream != sys.stderr:
|
||||
oStream.close()
|
||||
|
||||
def oMainArgparser(_=None):
|
||||
if not os.path.exists('/proc/sys/net/ipv6'):
|
||||
bIpV6 = 'False'
|
||||
else:
|
||||
bIpV6 = 'True'
|
||||
lIpV6Choices=[bIpV6, 'False']
|
||||
|
||||
parser = argparse.ArgumentParser(epilog=__doc__)
|
||||
# list(dSTATE_TYPE.values())
|
||||
# ['nospamkeys', 'dht', 'friends', 'name', 'statusmessage', 'status', 'groups', 'tcp_relay', 'path_node', 'conferences']
|
||||
|
||||
parser.add_argument('--output', type=str, default='',
|
||||
help='Destination for info/decrypt - defaults to stderr')
|
||||
parser.add_argument('--command', type=str, default='info',
|
||||
choices=['info', 'decrypt', 'nodes', 'edit'],
|
||||
help='Action command - default: info')
|
||||
# nargs='+',
|
||||
parser.add_argument('--edit', type=str, default='',
|
||||
help='comma seperated SECTION,num,key,value - or help for ')
|
||||
parser.add_argument('--indent', type=int, default=2,
|
||||
help='Indent for yaml/json/pprint')
|
||||
choices=['info', 'save', 'repr', 'yaml','json', 'pprint']
|
||||
if bHAVE_NMAP: choices += ['nmap_tcp', 'nmap_udp', 'nmap_onion']
|
||||
parser.add_argument('--info', type=str, default='info',
|
||||
choices=choices,
|
||||
help='Format for info command')
|
||||
choices = []
|
||||
if bHAVE_JQ:
|
||||
choices += ['select_tcp', 'select_udp', 'select_version']
|
||||
if bHAVE_NMAP: choices += ['nmap_tcp', 'nmap_udp']
|
||||
if download_url:
|
||||
choices += ['download']
|
||||
parser.add_argument('--nodes', type=str, default='',
|
||||
choices=choices,
|
||||
help='Action for nodes command (requires jq)')
|
||||
parser.add_argument('--download_nodes_url', type=str,
|
||||
default='https://nodes.tox.chat/json')
|
||||
parser.add_argument('--encoding', type=str, default=sENC)
|
||||
parser.add_argument('profile', type=str, nargs='+', default=None,
|
||||
help='tox profile file - may be encrypted')
|
||||
return parser
|
||||
|
||||
if __name__ == '__main__':
|
||||
lArgv = sys.argv[1:]
|
||||
parser = oMainArgparser()
|
||||
oArgs = parser.parse_args(lArgv)
|
||||
if oArgs.command in ['edit'] and oArgs.edit == 'help':
|
||||
l = list(dSTATE_TYPE.values())
|
||||
l.remove('END')
|
||||
print('Available Sections: ' +repr(l))
|
||||
print('Supported Quads: section,num,key,type ' +sEDIT_HELP)
|
||||
sys.exit(0)
|
||||
|
||||
vSetupLogging()
|
||||
for sFile in oArgs.profile:
|
||||
iMain(sFile, oArgs)
|
||||
|
||||
sys.exit(0)
|
||||
|
|
Loading…
Reference in a new issue