synapse 2.208.0__py311-none-any.whl → 2.210.0__py311-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of synapse might be problematic. Click here for more details.
- synapse/lib/cell.py +14 -4
- synapse/lib/coro.py +5 -0
- synapse/lib/json.py +48 -22
- synapse/lib/layer.py +23 -1
- synapse/lib/nexus.py +6 -0
- synapse/lib/rstorm.py +3 -1
- synapse/lib/storm.py +10 -2
- synapse/lib/stormlib/auth.py +6 -0
- synapse/lib/stormlib/notifications.py +12 -2
- synapse/lib/stormtypes.py +8 -0
- synapse/lib/version.py +2 -2
- synapse/lib/view.py +19 -6
- synapse/models/entity.py +26 -0
- synapse/models/inet.py +11 -0
- synapse/models/person.py +9 -2
- synapse/tests/test_cortex.py +3 -3
- synapse/tests/test_lib_aha.py +1 -1
- synapse/tests/test_lib_cell.py +28 -8
- synapse/tests/test_lib_coro.py +23 -0
- synapse/tests/test_lib_json.py +41 -16
- synapse/tests/test_lib_rstorm.py +4 -3
- synapse/tests/test_lib_stormtypes.py +135 -3
- synapse/tests/test_lib_view.py +22 -0
- synapse/tests/test_model_entity.py +21 -0
- synapse/tests/test_model_gov_intl.py +2 -2
- synapse/tests/test_model_inet.py +15 -0
- synapse/tests/test_model_media.py +1 -0
- synapse/tests/test_model_person.py +12 -0
- synapse/tests/test_telepath.py +52 -41
- synapse/tests/test_tools_aha.py +7 -8
- synapse/tests/utils.py +1 -1
- synapse/tools/aha/clone.py +7 -1
- synapse/tools/aha/easycert.py +37 -42
- synapse/tools/aha/enroll.py +7 -1
- synapse/tools/aha/list.py +60 -65
- synapse/tools/aha/mirror.py +7 -1
- synapse/tools/aha/provision/service.py +7 -1
- synapse/tools/aha/provision/user.py +7 -1
- synapse/tools/apikey.py +8 -1
- synapse/tools/axon2axon.py +7 -1
- synapse/tools/cellauth.py +6 -5
- synapse/tools/cmdr.py +2 -1
- synapse/tools/csvtool.py +7 -2
- synapse/tools/feed.py +8 -2
- synapse/tools/genpkg.py +7 -1
- synapse/tools/healthcheck.py +7 -1
- synapse/tools/livebackup.py +7 -3
- synapse/tools/modrole.py +7 -1
- synapse/tools/moduser.py +7 -2
- synapse/tools/promote.py +7 -3
- synapse/tools/pullfile.py +6 -1
- synapse/tools/pushfile.py +7 -1
- synapse/tools/reload.py +7 -4
- synapse/tools/snapshot.py +7 -1
- synapse/tools/storm.py +7 -1
- {synapse-2.208.0.dist-info → synapse-2.210.0.dist-info}/METADATA +2 -2
- {synapse-2.208.0.dist-info → synapse-2.210.0.dist-info}/RECORD +60 -59
- {synapse-2.208.0.dist-info → synapse-2.210.0.dist-info}/WHEEL +1 -1
- {synapse-2.208.0.dist-info → synapse-2.210.0.dist-info}/licenses/LICENSE +0 -0
- {synapse-2.208.0.dist-info → synapse-2.210.0.dist-info}/top_level.txt +0 -0
synapse/tests/test_telepath.py
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import ssl
|
|
3
|
+
import sys
|
|
3
4
|
import socket
|
|
4
5
|
import asyncio
|
|
5
6
|
import logging
|
|
6
|
-
import
|
|
7
|
+
import multiprocessing
|
|
7
8
|
|
|
8
9
|
from unittest import mock
|
|
9
10
|
|
|
10
11
|
import cryptography.hazmat.primitives.hashes as c_hashes
|
|
11
12
|
|
|
12
13
|
import synapse.exc as s_exc
|
|
13
|
-
import synapse.glob as s_glob
|
|
14
14
|
import synapse.common as s_common
|
|
15
15
|
import synapse.daemon as s_daemon
|
|
16
16
|
import synapse.telepath as s_telepath
|
|
@@ -189,6 +189,40 @@ class TeleAuth(s_telepath.Aware):
|
|
|
189
189
|
def getFooBar(self, x, y):
|
|
190
190
|
return x + y
|
|
191
191
|
|
|
192
|
+
def run_telepath_sync_genr_break(url: str,
|
|
193
|
+
evt1: multiprocessing.Event,
|
|
194
|
+
evt2: multiprocessing.Event,):
|
|
195
|
+
'''
|
|
196
|
+
This is a Process target.
|
|
197
|
+
'''
|
|
198
|
+
with s_telepath.openurl(url) as prox:
|
|
199
|
+
form = 'test:int'
|
|
200
|
+
|
|
201
|
+
q = '[' + ' '.join([f'{form}={i}' for i in range(10)]) + ' ]'
|
|
202
|
+
|
|
203
|
+
# This puts a link into the link pool
|
|
204
|
+
emesg = 12
|
|
205
|
+
msgs = list(prox.storm(q, opts={'show': ('node', 'nodeedits')}))
|
|
206
|
+
assert len(msgs) == emesg, f'Got {len(msgs)} messages, expected {emesg}'
|
|
207
|
+
|
|
208
|
+
# Get the link from the pool, add the fini callback and put it back
|
|
209
|
+
# This involves reaching into the proxy internals to do so.
|
|
210
|
+
link = prox.links.popleft()
|
|
211
|
+
link.onfini(evt1.set)
|
|
212
|
+
prox.links.append(link)
|
|
213
|
+
|
|
214
|
+
# Break from the generator right away, causing a
|
|
215
|
+
# GeneratorExit in the GenrHelp object __iter__ method.
|
|
216
|
+
mesg = None
|
|
217
|
+
for mesg in prox.storm(q):
|
|
218
|
+
break
|
|
219
|
+
# Ensure the query did yield an object
|
|
220
|
+
assert mesg is not None, 'mesg was not recieved!'
|
|
221
|
+
assert link.isfini is True, 'link.fini was not set to true'
|
|
222
|
+
|
|
223
|
+
evt2.set()
|
|
224
|
+
sys.exit(137)
|
|
225
|
+
|
|
192
226
|
class TeleTest(s_t_utils.SynTest):
|
|
193
227
|
|
|
194
228
|
async def test_telepath_basics(self):
|
|
@@ -296,47 +330,20 @@ class TeleTest(s_t_utils.SynTest):
|
|
|
296
330
|
async with await s_telepath.openurl('tcp://127.0.0.1/foo', port=dmon.addr[1]) as prox:
|
|
297
331
|
self.eq((10, 20, 30), await s_coro.executor(sync))
|
|
298
332
|
|
|
299
|
-
def test_telepath_sync_genr_break(self):
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
acm = self.getTestCoreAndProxy()
|
|
303
|
-
core, proxy = s_glob.sync(acm.__aenter__())
|
|
304
|
-
|
|
305
|
-
form = 'test:int'
|
|
306
|
-
|
|
307
|
-
q = '[' + ' '.join([f'{form}={i}' for i in range(10)]) + ' ]'
|
|
308
|
-
|
|
309
|
-
# This puts a link into the link pool
|
|
310
|
-
msgs = list(proxy.storm(q, opts={'show': ('node',)}))
|
|
311
|
-
self.len(12, msgs)
|
|
333
|
+
async def test_telepath_sync_genr_break(self):
|
|
334
|
+
async with self.getTestCore() as core:
|
|
335
|
+
url = core.getLocalUrl()
|
|
312
336
|
|
|
313
|
-
|
|
337
|
+
ctx = multiprocessing.get_context('spawn')
|
|
338
|
+
evt1 = ctx.Event()
|
|
339
|
+
evt2 = ctx.Event()
|
|
340
|
+
proc = ctx.Process(target=run_telepath_sync_genr_break, args=(url, evt1, evt2))
|
|
341
|
+
proc.start()
|
|
314
342
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
# Grab the fresh link from the pool so our original link is up next again
|
|
321
|
-
link2 = s_glob.sync(proxy.getPoolLink())
|
|
322
|
-
s_glob.sync(proxy._putPoolLink(link2))
|
|
323
|
-
|
|
324
|
-
q = f'{form} | sleep 0.1'
|
|
325
|
-
|
|
326
|
-
# Break from the generator right away, causing a
|
|
327
|
-
# GeneratorExit in the GenrHelp object __iter__ method.
|
|
328
|
-
mesg = None
|
|
329
|
-
for mesg in proxy.storm(q):
|
|
330
|
-
break
|
|
331
|
-
# Ensure the query did yield an object
|
|
332
|
-
self.nn(mesg)
|
|
333
|
-
|
|
334
|
-
# Ensure the link we have a reference too was torn down
|
|
335
|
-
self.true(evt.wait(4))
|
|
336
|
-
self.true(link.isfini)
|
|
337
|
-
|
|
338
|
-
finally:
|
|
339
|
-
s_glob.sync(acm.__aexit__(None, None, None))
|
|
343
|
+
self.true(await s_coro.executor(evt1.wait, timeout=30))
|
|
344
|
+
self.true(await s_coro.executor(evt2.wait, timeout=30))
|
|
345
|
+
proc.join(timeout=30)
|
|
346
|
+
self.eq(proc.exitcode, 137)
|
|
340
347
|
|
|
341
348
|
async def test_telepath_no_sess(self):
|
|
342
349
|
|
|
@@ -1016,6 +1023,10 @@ class TeleTest(s_t_utils.SynTest):
|
|
|
1016
1023
|
self.len(1, await wait.wait(timeout=5))
|
|
1017
1024
|
self.len(12, prox.links)
|
|
1018
1025
|
|
|
1026
|
+
# Cleanup our global state
|
|
1027
|
+
prox2._all_proxies.remove(prox2)
|
|
1028
|
+
await prox.fini()
|
|
1029
|
+
|
|
1019
1030
|
async def test_link_fini_breaking_tasks(self):
|
|
1020
1031
|
foo = Foo()
|
|
1021
1032
|
|
synapse/tests/test_tools_aha.py
CHANGED
|
@@ -38,7 +38,7 @@ class AhaToolsTest(s_t_utils.SynTest):
|
|
|
38
38
|
self.true(await waiter.wait(timeout=6))
|
|
39
39
|
|
|
40
40
|
argv = [ahaurl]
|
|
41
|
-
retn, outp = await self.execToolMain(s_a_list.
|
|
41
|
+
retn, outp = await self.execToolMain(s_a_list.main, argv)
|
|
42
42
|
self.eq(retn, 0)
|
|
43
43
|
|
|
44
44
|
outp.expect('''
|
|
@@ -48,7 +48,7 @@ class AhaToolsTest(s_t_utils.SynTest):
|
|
|
48
48
|
''', whitespace=False)
|
|
49
49
|
|
|
50
50
|
argv = [ahaurl, 'demo.net']
|
|
51
|
-
retn, outp = await self.execToolMain(s_a_list.
|
|
51
|
+
retn, outp = await self.execToolMain(s_a_list.main, argv)
|
|
52
52
|
self.eq(retn, 0)
|
|
53
53
|
outp.expect('Service network', whitespace=False)
|
|
54
54
|
outp.expect('cell0 demo.net', whitespace=False)
|
|
@@ -56,7 +56,7 @@ class AhaToolsTest(s_t_utils.SynTest):
|
|
|
56
56
|
async with self.getTestCore() as core:
|
|
57
57
|
curl = core.getLocalUrl()
|
|
58
58
|
argv = [curl]
|
|
59
|
-
retn, outp = await self.execToolMain(s_a_list.
|
|
59
|
+
retn, outp = await self.execToolMain(s_a_list.main, argv)
|
|
60
60
|
self.eq(1, retn)
|
|
61
61
|
outp.expect(f'Service at {curl} is not an Aha server')
|
|
62
62
|
|
|
@@ -67,18 +67,17 @@ class AhaToolsTest(s_t_utils.SynTest):
|
|
|
67
67
|
'dmon:listen': ephemeral_address}) as aha:
|
|
68
68
|
_, port = aha.sockaddr
|
|
69
69
|
ahaurl = f'tcp://root:root@127.0.0.1:{port}'
|
|
70
|
-
|
|
71
|
-
with self.getTestDir() as dirn:
|
|
70
|
+
with self.getTestSynDir() as syndir, self.getTestDir() as dirn:
|
|
72
71
|
argvbase = ['-a', ahaurl, '--certdir', dirn]
|
|
73
72
|
argv = argvbase + ['--ca', 'demo.net']
|
|
74
|
-
retn, outp = await self.execToolMain(s_a_easycert.
|
|
73
|
+
retn, outp = await self.execToolMain(s_a_easycert.main, argv)
|
|
75
74
|
self.eq(retn, 0)
|
|
76
75
|
outp.expect('Saved CA cert')
|
|
77
76
|
outp.expect('cas/demo.net.crt')
|
|
78
77
|
|
|
79
78
|
argv = argvbase + ['--server', '--server-sans', 'DNS:beeper.demo.net,DNS:booper.demo.net',
|
|
80
79
|
'--network', 'demo.net', 'beep.demo.net']
|
|
81
|
-
retn, outp = await self.execToolMain(s_a_easycert.
|
|
80
|
+
retn, outp = await self.execToolMain(s_a_easycert.main, argv)
|
|
82
81
|
self.eq(retn, 0)
|
|
83
82
|
outp.expect('key saved')
|
|
84
83
|
outp.expect('hosts/beep.demo.net.key')
|
|
@@ -86,7 +85,7 @@ class AhaToolsTest(s_t_utils.SynTest):
|
|
|
86
85
|
outp.expect('hosts/beep.demo.net.crt')
|
|
87
86
|
|
|
88
87
|
argv = argvbase + ['--network', 'demo.net', 'mallory@demo.net']
|
|
89
|
-
retn, outp = await self.execToolMain(s_a_easycert.
|
|
88
|
+
retn, outp = await self.execToolMain(s_a_easycert.main, argv)
|
|
90
89
|
self.eq(retn, 0)
|
|
91
90
|
outp.expect('key saved')
|
|
92
91
|
outp.expect('users/mallory@demo.net.key')
|
synapse/tests/utils.py
CHANGED
synapse/tools/aha/clone.py
CHANGED
|
@@ -5,6 +5,7 @@ import argparse
|
|
|
5
5
|
import synapse.exc as s_exc
|
|
6
6
|
import synapse.telepath as s_telepath
|
|
7
7
|
|
|
8
|
+
import synapse.lib.coro as s_coro
|
|
8
9
|
import synapse.lib.output as s_output
|
|
9
10
|
|
|
10
11
|
descr = '''
|
|
@@ -48,5 +49,10 @@ async def main(argv, outp=s_output.stdout):
|
|
|
48
49
|
outp.printf(f'ERROR: {mesg}')
|
|
49
50
|
return 1
|
|
50
51
|
|
|
52
|
+
async def _main(argv, outp=s_output.stdout): # pragma: no cover
|
|
53
|
+
ret = await main(argv, outp=outp)
|
|
54
|
+
await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
|
|
55
|
+
return ret
|
|
56
|
+
|
|
51
57
|
if __name__ == '__main__': # pragma: no cover
|
|
52
|
-
sys.exit(asyncio.run(
|
|
58
|
+
sys.exit(asyncio.run(_main(sys.argv[1:])))
|
synapse/tools/aha/easycert.py
CHANGED
|
@@ -8,13 +8,14 @@ import cryptography.x509 as c_x509
|
|
|
8
8
|
import synapse.common as s_common
|
|
9
9
|
import synapse.telepath as s_telepath
|
|
10
10
|
|
|
11
|
+
import synapse.lib.coro as s_coro
|
|
11
12
|
import synapse.lib.output as s_output
|
|
12
13
|
import synapse.lib.certdir as s_certdir
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
logger = logging.getLogger(__name__)
|
|
16
17
|
|
|
17
|
-
async def
|
|
18
|
+
async def main(argv, outp=s_output.stdout):
|
|
18
19
|
pars = getArgParser()
|
|
19
20
|
opts = pars.parse_args(argv)
|
|
20
21
|
|
|
@@ -22,36 +23,36 @@ async def _main(argv, outp):
|
|
|
22
23
|
s_common.deprecated('--network option.', curv='v2.206.0')
|
|
23
24
|
|
|
24
25
|
cdir = s_certdir.CertDir(path=opts.certdir)
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
26
|
+
async with s_telepath.withTeleEnv():
|
|
27
|
+
async with await s_telepath.openurl(opts.aha) as prox:
|
|
28
|
+
|
|
29
|
+
name = opts.name
|
|
30
|
+
|
|
31
|
+
if opts.ca:
|
|
32
|
+
# A User may only have get permissions; so try get first
|
|
33
|
+
# before attempting to generate a new CA.
|
|
34
|
+
certbyts = await prox.getCaCert(name)
|
|
35
|
+
if not certbyts:
|
|
36
|
+
s_common.deprecated('AHA CA certificate generation.', curv='v2.206.0')
|
|
37
|
+
certbyts = await prox.genCaCert(name)
|
|
38
|
+
cert = c_x509.load_pem_x509_certificate(certbyts.encode())
|
|
39
|
+
path = cdir._saveCertTo(cert, 'cas', f'{name}.crt')
|
|
40
|
+
outp.printf(f'Saved CA cert to {path}')
|
|
41
|
+
return 0
|
|
42
|
+
elif opts.server:
|
|
43
|
+
csr = cdir.genHostCsr(name, outp=outp)
|
|
44
|
+
certbyts = await prox.signHostCsr(csr.decode(), signas=opts.network, sans=opts.server_sans)
|
|
45
|
+
cert = c_x509.load_pem_x509_certificate(certbyts.encode())
|
|
46
|
+
path = cdir._saveCertTo(cert, 'hosts', f'{name}.crt')
|
|
47
|
+
outp.printf(f'crt saved: {path}')
|
|
48
|
+
return 0
|
|
49
|
+
else:
|
|
50
|
+
csr = cdir.genUserCsr(name, outp=outp)
|
|
51
|
+
certbyts = await prox.signUserCsr(csr.decode(), signas=opts.network)
|
|
52
|
+
cert = c_x509.load_pem_x509_certificate(certbyts.encode())
|
|
53
|
+
path = cdir._saveCertTo(cert, 'users', f'{name}.crt')
|
|
54
|
+
outp.printf(f'crt saved: {path}')
|
|
55
|
+
return 0
|
|
55
56
|
|
|
56
57
|
def getArgParser():
|
|
57
58
|
desc = 'CLI tool to generate simple x509 certificates from an Aha server.'
|
|
@@ -74,17 +75,11 @@ def getArgParser():
|
|
|
74
75
|
|
|
75
76
|
return pars
|
|
76
77
|
|
|
77
|
-
async def
|
|
78
|
-
|
|
79
|
-
if outp is None:
|
|
80
|
-
outp = s_output.stdout
|
|
81
|
-
|
|
78
|
+
async def _main(argv, outp=s_output.stdout): # pragma: no cover
|
|
82
79
|
s_common.setlogging(logger, 'WARNING')
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
return 0
|
|
80
|
+
ret = await main(argv, outp=outp)
|
|
81
|
+
await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
|
|
82
|
+
return ret
|
|
88
83
|
|
|
89
84
|
if __name__ == '__main__': # pragma: no cover
|
|
90
|
-
sys.exit(asyncio.run(
|
|
85
|
+
sys.exit(asyncio.run(_main(sys.argv[1:])))
|
synapse/tools/aha/enroll.py
CHANGED
|
@@ -6,6 +6,7 @@ import argparse
|
|
|
6
6
|
import synapse.common as s_common
|
|
7
7
|
import synapse.telepath as s_telepath
|
|
8
8
|
|
|
9
|
+
import synapse.lib.coro as s_coro
|
|
9
10
|
import synapse.lib.output as s_output
|
|
10
11
|
import synapse.lib.certdir as s_certdir
|
|
11
12
|
import synapse.lib.msgpack as s_msgpack
|
|
@@ -99,5 +100,10 @@ async def main(argv, outp=s_output.stdout):
|
|
|
99
100
|
|
|
100
101
|
return 0
|
|
101
102
|
|
|
103
|
+
async def _main(argv, outp=s_output.stdout): # pragma: no cover
|
|
104
|
+
ret = await main(argv, outp=outp)
|
|
105
|
+
await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
|
|
106
|
+
return ret
|
|
107
|
+
|
|
102
108
|
if __name__ == '__main__': # pragma: no cover
|
|
103
|
-
sys.exit(asyncio.run(
|
|
109
|
+
sys.exit(asyncio.run(_main(sys.argv[1:])))
|
synapse/tools/aha/list.py
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import sys
|
|
2
2
|
import asyncio
|
|
3
3
|
import logging
|
|
4
|
-
import contextlib
|
|
5
4
|
|
|
6
5
|
import synapse.exc as s_exc
|
|
7
6
|
import synapse.common as s_common
|
|
8
7
|
import synapse.telepath as s_telepath
|
|
9
8
|
|
|
9
|
+
import synapse.lib.coro as s_coro
|
|
10
10
|
import synapse.lib.output as s_output
|
|
11
11
|
import synapse.lib.version as s_version
|
|
12
12
|
|
|
@@ -14,76 +14,71 @@ logger = logging.getLogger(__name__)
|
|
|
14
14
|
|
|
15
15
|
reqver = '>=2.11.0,<3.0.0'
|
|
16
16
|
|
|
17
|
-
async def
|
|
18
|
-
|
|
19
|
-
async with await s_telepath.openurl(argv[0]) as prox:
|
|
20
|
-
try:
|
|
21
|
-
s_version.reqVersion(prox._getSynVers(), reqver)
|
|
22
|
-
except s_exc.BadVersion as e: # pragma: no cover
|
|
23
|
-
valu = s_version.fmtVersion(*e.get('valu'))
|
|
24
|
-
outp.printf(f'Proxy version {valu} is outside of the aha supported range ({reqver}).')
|
|
25
|
-
return 1
|
|
26
|
-
classes = prox._getClasses()
|
|
27
|
-
if 'synapse.lib.aha.AhaApi' not in classes:
|
|
28
|
-
outp.printf(f'Service at {argv[0]} is not an Aha server')
|
|
29
|
-
return 1
|
|
30
|
-
|
|
31
|
-
try:
|
|
32
|
-
network = argv[1]
|
|
33
|
-
except IndexError:
|
|
34
|
-
network = None
|
|
35
|
-
|
|
36
|
-
mesg = f"{'Service':<20s} {'network':<30s} {'leader':<6} {'online':<6} {'scheme':<6} {'host':<20} {'port':<5} connection opts"
|
|
37
|
-
outp.printf(mesg)
|
|
38
|
-
|
|
39
|
-
svcs = []
|
|
40
|
-
ldrs = set()
|
|
41
|
-
async for svc in prox.getAhaSvcs(network):
|
|
42
|
-
svcinfo = svc.get('svcinfo')
|
|
43
|
-
if svcinfo and svc.get('svcname') == svcinfo.get('leader'):
|
|
44
|
-
ldrs.add(svcinfo.get('run'))
|
|
45
|
-
svcs.append(svc)
|
|
46
|
-
|
|
47
|
-
for svc in svcs:
|
|
48
|
-
svcname = svc.pop('svcname')
|
|
49
|
-
svcnetw = svc.pop('svcnetw')
|
|
50
|
-
|
|
51
|
-
svcinfo = svc.pop('svcinfo')
|
|
52
|
-
urlinfo = svcinfo.pop('urlinfo')
|
|
53
|
-
online = str(bool(svcinfo.pop('online', False)))
|
|
54
|
-
host = urlinfo.pop('host')
|
|
55
|
-
port = str(urlinfo.pop('port'))
|
|
56
|
-
scheme = urlinfo.pop('scheme')
|
|
57
|
-
|
|
58
|
-
leader = 'None'
|
|
59
|
-
if svcinfo.get('leader') is not None:
|
|
60
|
-
if svcinfo.get('run') in ldrs:
|
|
61
|
-
leader = 'True'
|
|
62
|
-
else:
|
|
63
|
-
leader = 'False'
|
|
64
|
-
|
|
65
|
-
mesg = f'{svcname:<20s} {svcnetw:<30s} {leader:<6} {online:<6} {scheme:<6} {host:<20} {port:<5}'
|
|
66
|
-
if svc:
|
|
67
|
-
mesg = f'{mesg} {svc}'
|
|
68
|
-
|
|
69
|
-
outp.printf(mesg)
|
|
70
|
-
return 0
|
|
71
|
-
|
|
72
|
-
async def main(argv, outp=None): # pragma: no cover
|
|
73
|
-
|
|
74
|
-
if outp is None:
|
|
75
|
-
outp = s_output.stdout
|
|
17
|
+
async def main(argv, outp=s_output.stdout):
|
|
76
18
|
|
|
77
19
|
if len(argv) not in (1, 2):
|
|
78
20
|
outp.printf('usage: python -m synapse.tools.aha.list <url> [network name]')
|
|
79
21
|
return 1
|
|
80
22
|
|
|
81
|
-
s_common.setlogging(logger, 'WARNING')
|
|
82
|
-
|
|
83
23
|
async with s_telepath.withTeleEnv():
|
|
84
|
-
await
|
|
24
|
+
async with await s_telepath.openurl(argv[0]) as prox:
|
|
25
|
+
try:
|
|
26
|
+
s_version.reqVersion(prox._getSynVers(), reqver)
|
|
27
|
+
except s_exc.BadVersion as e: # pragma: no cover
|
|
28
|
+
valu = s_version.fmtVersion(*e.get('valu'))
|
|
29
|
+
outp.printf(f'Proxy version {valu} is outside of the aha supported range ({reqver}).')
|
|
30
|
+
return 1
|
|
31
|
+
classes = prox._getClasses()
|
|
32
|
+
if 'synapse.lib.aha.AhaApi' not in classes:
|
|
33
|
+
outp.printf(f'Service at {argv[0]} is not an Aha server')
|
|
34
|
+
return 1
|
|
35
|
+
|
|
36
|
+
try:
|
|
37
|
+
network = argv[1]
|
|
38
|
+
except IndexError:
|
|
39
|
+
network = None
|
|
40
|
+
|
|
41
|
+
mesg = f"{'Service':<20s} {'network':<30s} {'leader':<6} {'online':<6} {'scheme':<6} {'host':<20} {'port':<5} connection opts"
|
|
42
|
+
outp.printf(mesg)
|
|
85
43
|
|
|
86
|
-
|
|
44
|
+
svcs = []
|
|
45
|
+
ldrs = set()
|
|
46
|
+
async for svc in prox.getAhaSvcs(network):
|
|
47
|
+
svcinfo = svc.get('svcinfo')
|
|
48
|
+
if svcinfo and svc.get('svcname') == svcinfo.get('leader'):
|
|
49
|
+
ldrs.add(svcinfo.get('run'))
|
|
50
|
+
svcs.append(svc)
|
|
51
|
+
|
|
52
|
+
for svc in svcs:
|
|
53
|
+
svcname = svc.pop('svcname')
|
|
54
|
+
svcnetw = svc.pop('svcnetw')
|
|
55
|
+
|
|
56
|
+
svcinfo = svc.pop('svcinfo')
|
|
57
|
+
urlinfo = svcinfo.pop('urlinfo')
|
|
58
|
+
online = str(bool(svcinfo.pop('online', False)))
|
|
59
|
+
host = urlinfo.pop('host')
|
|
60
|
+
port = str(urlinfo.pop('port'))
|
|
61
|
+
scheme = urlinfo.pop('scheme')
|
|
62
|
+
|
|
63
|
+
leader = 'None'
|
|
64
|
+
if svcinfo.get('leader') is not None:
|
|
65
|
+
if svcinfo.get('run') in ldrs:
|
|
66
|
+
leader = 'True'
|
|
67
|
+
else:
|
|
68
|
+
leader = 'False'
|
|
69
|
+
|
|
70
|
+
mesg = f'{svcname:<20s} {svcnetw:<30s} {leader:<6} {online:<6} {scheme:<6} {host:<20} {port:<5}'
|
|
71
|
+
if svc:
|
|
72
|
+
mesg = f'{mesg} {svc}'
|
|
73
|
+
|
|
74
|
+
outp.printf(mesg)
|
|
75
|
+
return 0
|
|
76
|
+
|
|
77
|
+
async def _main(argv, outp=s_output.stdout): # pragma: no cover
|
|
78
|
+
s_common.setlogging(logger, 'WARNING')
|
|
79
|
+
ret = await main(argv, outp=outp)
|
|
80
|
+
await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
|
|
81
|
+
return ret
|
|
87
82
|
|
|
88
83
|
if __name__ == '__main__': # pragma: no cover
|
|
89
|
-
sys.exit(asyncio.run(
|
|
84
|
+
sys.exit(asyncio.run(_main(sys.argv[1:])))
|
synapse/tools/aha/mirror.py
CHANGED
|
@@ -6,6 +6,7 @@ import synapse.exc as s_exc
|
|
|
6
6
|
import synapse.common as s_common
|
|
7
7
|
import synapse.telepath as s_telepath
|
|
8
8
|
|
|
9
|
+
import synapse.lib.coro as s_coro
|
|
9
10
|
import synapse.lib.output as s_output
|
|
10
11
|
import synapse.lib.version as s_version
|
|
11
12
|
|
|
@@ -191,5 +192,10 @@ async def main(argv, outp=s_output.stdout):
|
|
|
191
192
|
outp.printf(f'ERROR: {mesg}')
|
|
192
193
|
return 1
|
|
193
194
|
|
|
195
|
+
async def _main(argv, outp=s_output.stdout): # pragma: no cover
|
|
196
|
+
ret = await main(argv, outp=outp)
|
|
197
|
+
await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
|
|
198
|
+
return ret
|
|
199
|
+
|
|
194
200
|
if __name__ == '__main__': # pragma: no cover
|
|
195
|
-
sys.exit(asyncio.run(
|
|
201
|
+
sys.exit(asyncio.run(_main(sys.argv[1:])))
|
|
@@ -6,6 +6,7 @@ import synapse.exc as s_exc
|
|
|
6
6
|
import synapse.common as s_common
|
|
7
7
|
import synapse.telepath as s_telepath
|
|
8
8
|
|
|
9
|
+
import synapse.lib.coro as s_coro
|
|
9
10
|
import synapse.lib.output as s_output
|
|
10
11
|
|
|
11
12
|
descr = '''
|
|
@@ -78,5 +79,10 @@ async def main(argv, outp=s_output.stdout):
|
|
|
78
79
|
outp.printf(f'ERROR: {mesg}')
|
|
79
80
|
return 1
|
|
80
81
|
|
|
82
|
+
async def _main(argv, outp=s_output.stdout): # pragma: no cover
|
|
83
|
+
ret = await main(argv, outp=outp)
|
|
84
|
+
await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
|
|
85
|
+
return ret
|
|
86
|
+
|
|
81
87
|
if __name__ == '__main__': # pragma: no cover
|
|
82
|
-
sys.exit(asyncio.run(
|
|
88
|
+
sys.exit(asyncio.run(_main(sys.argv[1:])))
|
|
@@ -5,6 +5,7 @@ import argparse
|
|
|
5
5
|
import synapse.exc as s_exc
|
|
6
6
|
import synapse.telepath as s_telepath
|
|
7
7
|
|
|
8
|
+
import synapse.lib.coro as s_coro
|
|
8
9
|
import synapse.lib.output as s_output
|
|
9
10
|
|
|
10
11
|
descr = '''
|
|
@@ -49,5 +50,10 @@ async def main(argv, outp=s_output.stdout):
|
|
|
49
50
|
outp.printf(f'ERROR: {mesg}')
|
|
50
51
|
return 1
|
|
51
52
|
|
|
53
|
+
async def _main(argv, outp=s_output.stdout): # pragma: no cover
|
|
54
|
+
ret = await main(argv, outp=outp)
|
|
55
|
+
await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
|
|
56
|
+
return ret
|
|
57
|
+
|
|
52
58
|
if __name__ == '__main__': # pragma: no cover
|
|
53
|
-
sys.exit(asyncio.run(
|
|
59
|
+
sys.exit(asyncio.run(_main(sys.argv[1:])))
|
synapse/tools/apikey.py
CHANGED
|
@@ -5,6 +5,7 @@ import argparse
|
|
|
5
5
|
import synapse.exc as s_exc
|
|
6
6
|
import synapse.telepath as s_telepath
|
|
7
7
|
|
|
8
|
+
import synapse.lib.coro as s_coro
|
|
8
9
|
import synapse.lib.time as s_time
|
|
9
10
|
import synapse.lib.output as s_output
|
|
10
11
|
|
|
@@ -89,5 +90,11 @@ async def main(argv, outp=s_output.stdout):
|
|
|
89
90
|
|
|
90
91
|
return 0
|
|
91
92
|
|
|
93
|
+
|
|
94
|
+
async def _main(argv, outp=s_output.stdout): # pragma: no cover
|
|
95
|
+
ret = await main(argv, outp=outp)
|
|
96
|
+
await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
|
|
97
|
+
return ret
|
|
98
|
+
|
|
92
99
|
if __name__ == '__main__': # pragma: no cover
|
|
93
|
-
sys.exit(asyncio.run(
|
|
100
|
+
sys.exit(asyncio.run(_main(sys.argv[1:])))
|
synapse/tools/axon2axon.py
CHANGED
|
@@ -8,6 +8,7 @@ import synapse.telepath as s_telepath
|
|
|
8
8
|
import synapse.exc as s_exc
|
|
9
9
|
import synapse.lib.cmd as s_cmd
|
|
10
10
|
import synapse.lib.base as s_base
|
|
11
|
+
import synapse.lib.coro as s_coro
|
|
11
12
|
import synapse.lib.output as s_output
|
|
12
13
|
|
|
13
14
|
logger = logging.getLogger(__name__)
|
|
@@ -42,5 +43,10 @@ async def main(argv, outp=s_output.stdout):
|
|
|
42
43
|
await fd.save()
|
|
43
44
|
return 0
|
|
44
45
|
|
|
46
|
+
async def _main(argv, outp=s_output.stdout): # pragma: no cover
|
|
47
|
+
ret = await main(argv, outp=outp)
|
|
48
|
+
await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
|
|
49
|
+
return ret
|
|
50
|
+
|
|
45
51
|
if __name__ == '__main__': # pragma: no cover
|
|
46
|
-
sys.exit(asyncio.run(
|
|
52
|
+
sys.exit(asyncio.run(_main(sys.argv[1:])))
|
synapse/tools/cellauth.py
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import os
|
|
2
1
|
import sys
|
|
3
2
|
import asyncio
|
|
4
3
|
import logging
|
|
@@ -7,10 +6,10 @@ import traceback
|
|
|
7
6
|
import synapse.exc as s_exc
|
|
8
7
|
import synapse.common as s_common
|
|
9
8
|
|
|
10
|
-
import synapse.glob as s_glob
|
|
11
9
|
import synapse.telepath as s_telepath
|
|
12
10
|
|
|
13
11
|
import synapse.lib.cmd as s_cmd
|
|
12
|
+
import synapse.lib.coro as s_coro
|
|
14
13
|
import synapse.lib.output as s_output
|
|
15
14
|
import synapse.lib.version as s_version
|
|
16
15
|
|
|
@@ -338,9 +337,11 @@ def makeargparser():
|
|
|
338
337
|
pars_mod.set_defaults(func=handleModify)
|
|
339
338
|
return pars
|
|
340
339
|
|
|
341
|
-
async def _main(): # pragma: no cover
|
|
340
|
+
async def _main(argv, outp=s_output.stdout): # pragma: no cover
|
|
342
341
|
s_common.setlogging(logger, 'DEBUG')
|
|
343
|
-
|
|
342
|
+
ret = await main(argv, outprint=outp)
|
|
343
|
+
await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
|
|
344
|
+
return ret
|
|
344
345
|
|
|
345
346
|
if __name__ == '__main__': # pragma: no cover
|
|
346
|
-
sys.exit(
|
|
347
|
+
sys.exit(asyncio.run(_main(sys.argv[1:])))
|
synapse/tools/cmdr.py
CHANGED
|
@@ -9,6 +9,7 @@ import synapse.common as s_common
|
|
|
9
9
|
import synapse.telepath as s_telepath
|
|
10
10
|
|
|
11
11
|
import synapse.lib.cmdr as s_cmdr
|
|
12
|
+
import synapse.lib.coro as s_coro
|
|
12
13
|
import synapse.lib.version as s_version
|
|
13
14
|
|
|
14
15
|
logger = logging.getLogger(__name__)
|
|
@@ -51,7 +52,7 @@ async def main(argv): # pragma: no cover
|
|
|
51
52
|
|
|
52
53
|
async with s_telepath.withTeleEnv():
|
|
53
54
|
await _main(argv)
|
|
54
|
-
|
|
55
|
+
await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
|
|
55
56
|
return 0
|
|
56
57
|
|
|
57
58
|
if __name__ == '__main__': # pragma: no cover
|
synapse/tools/csvtool.py
CHANGED
|
@@ -9,8 +9,8 @@ import synapse.common as s_common
|
|
|
9
9
|
import synapse.telepath as s_telepath
|
|
10
10
|
|
|
11
11
|
import synapse.lib.cmd as s_cmd
|
|
12
|
-
import synapse.lib.base as s_base
|
|
13
12
|
import synapse.lib.cmdr as s_cmdr
|
|
13
|
+
import synapse.lib.coro as s_coro
|
|
14
14
|
import synapse.lib.json as s_json
|
|
15
15
|
import synapse.lib.output as s_output
|
|
16
16
|
import synapse.lib.version as s_version
|
|
@@ -235,5 +235,10 @@ def makeargparser(outp):
|
|
|
235
235
|
pars.add_argument('csvfiles', nargs='+', help='CSV files to load.')
|
|
236
236
|
return pars
|
|
237
237
|
|
|
238
|
+
async def _main(argv, outp=s_output.stdout): # pragma: no cover
|
|
239
|
+
ret = await main(argv, outp=outp)
|
|
240
|
+
await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
|
|
241
|
+
return ret
|
|
242
|
+
|
|
238
243
|
if __name__ == '__main__': # pragma: no cover
|
|
239
|
-
sys.exit(asyncio.run(
|
|
244
|
+
sys.exit(asyncio.run(_main(sys.argv[1:])))
|