synapse 2.177.0__py311-none-any.whl → 2.178.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/cortex.py +8 -4
- synapse/lib/aha.py +361 -88
- synapse/lib/base.py +27 -9
- synapse/lib/cell.py +167 -110
- synapse/lib/config.py +15 -11
- synapse/lib/coro.py +13 -0
- synapse/lib/layer.py +0 -5
- synapse/lib/link.py +1 -1
- synapse/lib/lmdbslab.py +3 -3
- synapse/lib/nexus.py +24 -12
- synapse/lib/stormlib/imap.py +6 -2
- synapse/lib/stormlib/smtp.py +12 -2
- synapse/lib/version.py +2 -2
- synapse/telepath.py +32 -17
- synapse/tests/files/aha/certs/cas/synapse.crt +28 -0
- synapse/tests/files/aha/certs/cas/synapse.key +51 -0
- synapse/tests/files/aha/certs/hosts/00.aha.loop.vertex.link.crt +30 -0
- synapse/tests/files/aha/certs/hosts/00.aha.loop.vertex.link.key +51 -0
- synapse/tests/files/aha/certs/users/root@synapse.crt +29 -0
- synapse/tests/files/aha/certs/users/root@synapse.key +51 -0
- synapse/tests/files/rstorm/testsvc.py +1 -1
- synapse/tests/test_axon.py +1 -1
- synapse/tests/test_cortex.py +22 -59
- synapse/tests/test_lib_agenda.py +3 -3
- synapse/tests/test_lib_aha.py +336 -490
- synapse/tests/test_lib_base.py +20 -0
- synapse/tests/test_lib_cell.py +49 -22
- synapse/tests/test_lib_config.py +4 -3
- synapse/tests/test_lib_nexus.py +8 -0
- synapse/tests/test_lib_stormlib_aha.py +35 -35
- synapse/tests/test_lib_stormlib_cell.py +4 -15
- synapse/tests/test_lib_stormlib_imap.py +14 -3
- synapse/tests/test_lib_stormlib_smtp.py +51 -0
- synapse/tests/test_tools_aha.py +78 -101
- synapse/tests/utils.py +86 -120
- synapse/tools/aha/clone.py +50 -0
- synapse/tools/aha/enroll.py +2 -1
- synapse/tools/backup.py +2 -2
- synapse/tools/changelog.py +3 -1
- {synapse-2.177.0.dist-info → synapse-2.178.0.dist-info}/METADATA +48 -48
- {synapse-2.177.0.dist-info → synapse-2.178.0.dist-info}/RECORD +44 -37
- {synapse-2.177.0.dist-info → synapse-2.178.0.dist-info}/LICENSE +0 -0
- {synapse-2.177.0.dist-info → synapse-2.178.0.dist-info}/WHEEL +0 -0
- {synapse-2.177.0.dist-info → synapse-2.178.0.dist-info}/top_level.txt +0 -0
synapse/lib/config.py
CHANGED
|
@@ -392,10 +392,16 @@ class Config(c_abc.MutableMapping):
|
|
|
392
392
|
else:
|
|
393
393
|
return
|
|
394
394
|
|
|
395
|
-
def reqConfValu(self, key):
|
|
395
|
+
def reqConfValu(self, key): # pragma: no cover
|
|
396
396
|
'''
|
|
397
|
-
|
|
398
|
-
|
|
397
|
+
Deprecated. Use ``req(key)`` API instead.
|
|
398
|
+
'''
|
|
399
|
+
s_common.deprecated('Config.reqConfValu(), use req() instead.')
|
|
400
|
+
return self.req(key)
|
|
401
|
+
|
|
402
|
+
def req(self, key):
|
|
403
|
+
'''
|
|
404
|
+
Get a configuration value. If that value is not present in the schema or is not set, then raise an exception.
|
|
399
405
|
|
|
400
406
|
Args:
|
|
401
407
|
key (str): The key to require.
|
|
@@ -403,17 +409,15 @@ class Config(c_abc.MutableMapping):
|
|
|
403
409
|
Returns:
|
|
404
410
|
The requested value.
|
|
405
411
|
'''
|
|
406
|
-
# Ensure that the key is in self.json_schema
|
|
407
412
|
if key not in self.json_schema.get('properties', {}):
|
|
408
|
-
raise s_exc.BadArg(mesg='
|
|
409
|
-
|
|
413
|
+
raise s_exc.BadArg(mesg=f'The {key} configuration option is not present in the configuration schema.',
|
|
414
|
+
name=key)
|
|
410
415
|
|
|
411
|
-
|
|
412
|
-
if
|
|
413
|
-
|
|
414
|
-
key=key)
|
|
416
|
+
valu = self.conf.get(key, s_common.novalu)
|
|
417
|
+
if valu is not s_common.novalu:
|
|
418
|
+
return valu
|
|
415
419
|
|
|
416
|
-
|
|
420
|
+
raise s_exc.NeedConfValu(mesg=f'The {key} configuration option is required.', name=key)
|
|
417
421
|
|
|
418
422
|
def reqKeyValid(self, key, value):
|
|
419
423
|
'''
|
synapse/lib/coro.py
CHANGED
|
@@ -148,6 +148,19 @@ async def ornot(func, *args, **kwargs):
|
|
|
148
148
|
return await retn
|
|
149
149
|
return retn
|
|
150
150
|
|
|
151
|
+
bgtasks = set()
|
|
152
|
+
def create_task(coro):
|
|
153
|
+
|
|
154
|
+
task = asyncio.get_running_loop().create_task(coro)
|
|
155
|
+
bgtasks.add(task)
|
|
156
|
+
|
|
157
|
+
def done(t):
|
|
158
|
+
bgtasks.remove(t)
|
|
159
|
+
|
|
160
|
+
task.add_done_callback(done)
|
|
161
|
+
|
|
162
|
+
return task
|
|
163
|
+
|
|
151
164
|
class GenrHelp:
|
|
152
165
|
|
|
153
166
|
def __init__(self, genr):
|
synapse/lib/layer.py
CHANGED
|
@@ -1431,9 +1431,6 @@ class Layer(s_nexus.Pusher):
|
|
|
1431
1431
|
self.growsize = self.layrinfo.get('growsize')
|
|
1432
1432
|
self.logedits = self.layrinfo.get('logedits')
|
|
1433
1433
|
|
|
1434
|
-
self.mapasync = core.conf.get('layer:lmdb:map_async')
|
|
1435
|
-
self.maxreplaylog = core.conf.get('layer:lmdb:max_replay_log')
|
|
1436
|
-
|
|
1437
1434
|
# slim hooks to avoid async/fire
|
|
1438
1435
|
self.nodeAddHook = None
|
|
1439
1436
|
self.nodeDelHook = None
|
|
@@ -2728,8 +2725,6 @@ class Layer(s_nexus.Pusher):
|
|
|
2728
2725
|
slabopts = {
|
|
2729
2726
|
'readahead': True,
|
|
2730
2727
|
'lockmemory': self.lockmemory,
|
|
2731
|
-
'map_async': self.mapasync,
|
|
2732
|
-
'max_replay_log': self.maxreplaylog,
|
|
2733
2728
|
}
|
|
2734
2729
|
|
|
2735
2730
|
if self.growsize is not None:
|
synapse/lib/link.py
CHANGED
|
@@ -164,7 +164,7 @@ class Link(s_base.Base):
|
|
|
164
164
|
self.reader._transport.abort()
|
|
165
165
|
try:
|
|
166
166
|
await self.writer.wait_closed()
|
|
167
|
-
except
|
|
167
|
+
except Exception as e:
|
|
168
168
|
logger.debug('Link error waiting on close: %s', str(e))
|
|
169
169
|
|
|
170
170
|
self.onfini(fini)
|
synapse/lib/lmdbslab.py
CHANGED
|
@@ -838,7 +838,7 @@ class Slab(s_base.Base):
|
|
|
838
838
|
'recovering': slab.recovering,
|
|
839
839
|
'maxsize': slab.maxsize,
|
|
840
840
|
'growsize': slab.growsize,
|
|
841
|
-
'mapasync':
|
|
841
|
+
'mapasync': True,
|
|
842
842
|
|
|
843
843
|
})
|
|
844
844
|
return retn
|
|
@@ -851,6 +851,8 @@ class Slab(s_base.Base):
|
|
|
851
851
|
kwargs.setdefault('lockmemory', False)
|
|
852
852
|
kwargs.setdefault('map_async', True)
|
|
853
853
|
|
|
854
|
+
assert kwargs.get('map_async')
|
|
855
|
+
|
|
854
856
|
opts = kwargs
|
|
855
857
|
|
|
856
858
|
self.path = path
|
|
@@ -895,8 +897,6 @@ class Slab(s_base.Base):
|
|
|
895
897
|
logger.info(f'SYN_LOCKMEM_DISABLE envar set, skipping lockmem for {self.path}')
|
|
896
898
|
self.lockmemory = False
|
|
897
899
|
|
|
898
|
-
self.mapasync = opts.setdefault('map_async', True)
|
|
899
|
-
|
|
900
900
|
self.mapsize = _mapsizeround(mapsize)
|
|
901
901
|
if self.maxsize is not None:
|
|
902
902
|
self.mapsize = min(self.mapsize, self.maxsize)
|
synapse/lib/nexus.py
CHANGED
|
@@ -91,7 +91,6 @@ class NexsRoot(s_base.Base):
|
|
|
91
91
|
self.writeholds = set()
|
|
92
92
|
|
|
93
93
|
self.applytask = None
|
|
94
|
-
self.applylock = asyncio.Lock()
|
|
95
94
|
|
|
96
95
|
self.ready = asyncio.Event()
|
|
97
96
|
self.donexslog = self.cell.conf.get('nexslog:en')
|
|
@@ -110,9 +109,7 @@ class NexsRoot(s_base.Base):
|
|
|
110
109
|
|
|
111
110
|
logpath = s_common.genpath(self.dirn, 'slabs', 'nexuslog')
|
|
112
111
|
|
|
113
|
-
self.
|
|
114
|
-
self.nexsslab = await s_lmdbslab.Slab.anit(path, map_async=self.map_async)
|
|
115
|
-
self.nexsslab.addResizeCallback(cell.checkFreeSpace)
|
|
112
|
+
self.nexsslab = await cell._initSlabFile(path)
|
|
116
113
|
|
|
117
114
|
self.nexshot = await self.nexsslab.getHotCount('nexs:indx')
|
|
118
115
|
|
|
@@ -126,8 +123,7 @@ class NexsRoot(s_base.Base):
|
|
|
126
123
|
elif vers != 2:
|
|
127
124
|
raise s_exc.BadStorageVersion(mesg=f'Got nexus log version {vers}. Expected 2. Accidental downgrade?')
|
|
128
125
|
|
|
129
|
-
|
|
130
|
-
self.nexslog = await s_multislabseqn.MultiSlabSeqn.anit(logpath, slabopts=slabopts, cell=cell)
|
|
126
|
+
self.nexslog = await s_multislabseqn.MultiSlabSeqn.anit(logpath, cell=cell)
|
|
131
127
|
|
|
132
128
|
# just in case were previously configured differently
|
|
133
129
|
logindx = self.nexslog.index()
|
|
@@ -147,6 +143,9 @@ class NexsRoot(s_base.Base):
|
|
|
147
143
|
|
|
148
144
|
self.onfini(fini)
|
|
149
145
|
|
|
146
|
+
def getNexsKids(self):
|
|
147
|
+
return list(self._nexskids.values())
|
|
148
|
+
|
|
150
149
|
async def _migrateV1toV2(self, nexspath, logpath):
|
|
151
150
|
'''
|
|
152
151
|
Close the slab, move it to the new multislab location, then copy out the nexshot
|
|
@@ -195,8 +194,7 @@ class NexsRoot(s_base.Base):
|
|
|
195
194
|
|
|
196
195
|
# Open a fresh slab where the old one used to be
|
|
197
196
|
logger.warning(f'Re-opening fresh nexslog slab at {nexspath} for nexshot')
|
|
198
|
-
self.nexsslab = await
|
|
199
|
-
self.nexsslab.addResizeCallback(self.cell.checkFreeSpace)
|
|
197
|
+
self.nexsslab = await self.cell._initSlabFile(nexspath)
|
|
200
198
|
|
|
201
199
|
self.nexshot = await self.nexsslab.getHotCount('nexs:indx')
|
|
202
200
|
|
|
@@ -230,7 +228,7 @@ class NexsRoot(s_base.Base):
|
|
|
230
228
|
|
|
231
229
|
async def enNexsLog(self):
|
|
232
230
|
|
|
233
|
-
async with self.
|
|
231
|
+
async with self.cell.nexslock:
|
|
234
232
|
|
|
235
233
|
if self.donexslog:
|
|
236
234
|
return
|
|
@@ -309,7 +307,6 @@ class NexsRoot(s_base.Base):
|
|
|
309
307
|
If I'm not a follower, mutate, otherwise, ask the leader to make the change and wait for the follower loop
|
|
310
308
|
to hand me the result through a future.
|
|
311
309
|
'''
|
|
312
|
-
|
|
313
310
|
# pick up a reference to avoid race when we eventually can promote
|
|
314
311
|
client = self.client
|
|
315
312
|
|
|
@@ -344,7 +341,7 @@ class NexsRoot(s_base.Base):
|
|
|
344
341
|
if meta is None:
|
|
345
342
|
meta = {}
|
|
346
343
|
|
|
347
|
-
async with self.
|
|
344
|
+
async with self.cell.nexslock:
|
|
348
345
|
self.reqNotReadOnly()
|
|
349
346
|
# Keep a reference to the shielded task to ensure it isn't GC'd
|
|
350
347
|
self.applytask = asyncio.create_task(self._eat((nexsiden, event, args, kwargs, meta)))
|
|
@@ -577,6 +574,9 @@ class NexsRoot(s_base.Base):
|
|
|
577
574
|
if respfutu is not None:
|
|
578
575
|
respfutu.set_result(retn)
|
|
579
576
|
|
|
577
|
+
except s_exc.LinkShutDown:
|
|
578
|
+
logger.warning(f'mirror loop: leader closed the connection.')
|
|
579
|
+
|
|
580
580
|
except Exception as exc: # pragma: no cover
|
|
581
581
|
logger.exception(f'error in mirror loop: {exc}')
|
|
582
582
|
|
|
@@ -634,9 +634,21 @@ class Pusher(s_base.Base, metaclass=RegMethType):
|
|
|
634
634
|
assert prev is not None, f'Failed removing {self.nexsiden}'
|
|
635
635
|
|
|
636
636
|
self.onfini(onfini)
|
|
637
|
-
|
|
638
637
|
self.nexsroot = nexsroot
|
|
639
638
|
|
|
639
|
+
async def modNexsRoot(self, ctor):
|
|
640
|
+
|
|
641
|
+
kids = [self]
|
|
642
|
+
if self.nexsroot is not None:
|
|
643
|
+
kids = self.nexsroot.getNexsKids()
|
|
644
|
+
await self.nexsroot.fini()
|
|
645
|
+
|
|
646
|
+
nexsroot = await ctor()
|
|
647
|
+
|
|
648
|
+
[kid.setNexsRoot(nexsroot) for kid in kids]
|
|
649
|
+
|
|
650
|
+
await nexsroot.startup()
|
|
651
|
+
|
|
640
652
|
@classmethod
|
|
641
653
|
def onPush(cls, event: str, passitem=False) -> Callable:
|
|
642
654
|
'''
|
synapse/lib/stormlib/imap.py
CHANGED
|
@@ -50,6 +50,8 @@ class ImapLib(s_stormtypes.Lib):
|
|
|
50
50
|
'desc': 'The time to wait for all commands on the server to execute.'},
|
|
51
51
|
{'type': 'bool', 'name': 'ssl', 'default': True,
|
|
52
52
|
'desc': 'Use SSL to connect to the IMAP server.'},
|
|
53
|
+
{'type': 'bool', 'name': 'ssl_verify', 'default': True,
|
|
54
|
+
'desc': 'Perform SSL/TLS verification.'},
|
|
53
55
|
),
|
|
54
56
|
'returns': {
|
|
55
57
|
'type': 'inet:imap:server',
|
|
@@ -69,17 +71,19 @@ class ImapLib(s_stormtypes.Lib):
|
|
|
69
71
|
'connect': self.connect,
|
|
70
72
|
}
|
|
71
73
|
|
|
72
|
-
async def connect(self, host, port=993, timeout=30, ssl=True):
|
|
74
|
+
async def connect(self, host, port=993, timeout=30, ssl=True, ssl_verify=True):
|
|
73
75
|
|
|
74
76
|
self.runt.confirm(('storm', 'inet', 'imap', 'connect'))
|
|
75
77
|
|
|
76
78
|
ssl = await s_stormtypes.tobool(ssl)
|
|
77
79
|
host = await s_stormtypes.tostr(host)
|
|
78
80
|
port = await s_stormtypes.toint(port)
|
|
81
|
+
ssl_verify = await s_stormtypes.tobool(ssl_verify)
|
|
79
82
|
timeout = await s_stormtypes.toint(timeout, noneok=True)
|
|
80
83
|
|
|
81
84
|
if ssl:
|
|
82
|
-
|
|
85
|
+
ctx = self.runt.snap.core.getCachedSslCtx(opts=None, verify=ssl_verify)
|
|
86
|
+
imap_cli = aioimaplib.IMAP4_SSL(host=host, port=port, timeout=timeout, ssl_context=ctx)
|
|
83
87
|
else:
|
|
84
88
|
imap_cli = aioimaplib.IMAP4(host=host, port=port, timeout=timeout)
|
|
85
89
|
|
synapse/lib/stormlib/smtp.py
CHANGED
|
@@ -96,6 +96,8 @@ class SmtpMessage(s_stormtypes.StormType):
|
|
|
96
96
|
'desc': 'Use the STARTTLS directive with the SMTP server.'},
|
|
97
97
|
{'name': 'timeout', 'type': 'int', 'default': 60,
|
|
98
98
|
'desc': 'The timeout (in seconds) to wait for message delivery.'},
|
|
99
|
+
{'type': 'bool', 'name': 'ssl_verify', 'default': True,
|
|
100
|
+
'desc': 'Perform SSL/TLS verification.'},
|
|
99
101
|
),
|
|
100
102
|
'returns': {'type': 'list', 'desc': 'An ($ok, $valu) tuple.'}}},
|
|
101
103
|
|
|
@@ -148,7 +150,8 @@ class SmtpMessage(s_stormtypes.StormType):
|
|
|
148
150
|
async def _getEmailHtml(self):
|
|
149
151
|
return self.bodyhtml
|
|
150
152
|
|
|
151
|
-
async def send(self, host, port=25, user=None, passwd=None, usetls=False, starttls=False, timeout=60
|
|
153
|
+
async def send(self, host, port=25, user=None, passwd=None, usetls=False, starttls=False, timeout=60,
|
|
154
|
+
ssl_verify=True):
|
|
152
155
|
|
|
153
156
|
self.runt.confirm(('storm', 'inet', 'smtp', 'send'))
|
|
154
157
|
|
|
@@ -161,6 +164,7 @@ class SmtpMessage(s_stormtypes.StormType):
|
|
|
161
164
|
port = await s_stormtypes.toint(port)
|
|
162
165
|
usetls = await s_stormtypes.tobool(usetls)
|
|
163
166
|
starttls = await s_stormtypes.tobool(starttls)
|
|
167
|
+
ssl_verify = await s_stormtypes.tobool(ssl_verify)
|
|
164
168
|
|
|
165
169
|
if usetls and starttls:
|
|
166
170
|
raise s_exc.BadArg(mesg='usetls and starttls are mutually exclusive arguments.')
|
|
@@ -183,6 +187,10 @@ class SmtpMessage(s_stormtypes.StormType):
|
|
|
183
187
|
|
|
184
188
|
recipients = [await s_stormtypes.tostr(e) for e in self.recipients]
|
|
185
189
|
|
|
190
|
+
ctx = None
|
|
191
|
+
if usetls or starttls:
|
|
192
|
+
ctx = self.runt.snap.core.getCachedSslCtx(opts=None, verify=ssl_verify)
|
|
193
|
+
|
|
186
194
|
futu = aiosmtplib.send(message,
|
|
187
195
|
port=port,
|
|
188
196
|
hostname=host,
|
|
@@ -191,7 +199,9 @@ class SmtpMessage(s_stormtypes.StormType):
|
|
|
191
199
|
use_tls=usetls,
|
|
192
200
|
start_tls=starttls,
|
|
193
201
|
username=user,
|
|
194
|
-
password=passwd
|
|
202
|
+
password=passwd,
|
|
203
|
+
tls_context=ctx,
|
|
204
|
+
)
|
|
195
205
|
|
|
196
206
|
await s_common.wait_for(futu, timeout=timeout)
|
|
197
207
|
|
synapse/lib/version.py
CHANGED
|
@@ -223,6 +223,6 @@ def reqVersion(valu, reqver,
|
|
|
223
223
|
##############################################################################
|
|
224
224
|
# The following are touched during the release process by bumpversion.
|
|
225
225
|
# Do not modify these directly.
|
|
226
|
-
version = (2,
|
|
226
|
+
version = (2, 178, 0)
|
|
227
227
|
verstring = '.'.join([str(x) for x in version])
|
|
228
|
-
commit = '
|
|
228
|
+
commit = '56bad29e241893b702ea437d500a0229e8e1956b'
|
synapse/telepath.py
CHANGED
|
@@ -997,12 +997,6 @@ class ClientV2(s_base.Base):
|
|
|
997
997
|
|
|
998
998
|
await s_base.Base.__anit__(self)
|
|
999
999
|
|
|
1000
|
-
# some ugly stuff in order to be backward compatible...
|
|
1001
|
-
if not isinstance(urlinfo, (list, tuple)):
|
|
1002
|
-
urlinfo = (urlinfo,)
|
|
1003
|
-
|
|
1004
|
-
urlinfo = [chopurl(u) for u in urlinfo]
|
|
1005
|
-
|
|
1006
1000
|
self.aha = None
|
|
1007
1001
|
|
|
1008
1002
|
self.clients = {}
|
|
@@ -1012,9 +1006,9 @@ class ClientV2(s_base.Base):
|
|
|
1012
1006
|
|
|
1013
1007
|
self.onlink = onlink
|
|
1014
1008
|
|
|
1015
|
-
self.booturls = urlinfo
|
|
1016
1009
|
self.bootdeque = collections.deque()
|
|
1017
|
-
|
|
1010
|
+
|
|
1011
|
+
self.setBootUrls(urlinfo)
|
|
1018
1012
|
|
|
1019
1013
|
self.ready = asyncio.Event()
|
|
1020
1014
|
self.deque = collections.deque()
|
|
@@ -1033,6 +1027,16 @@ class ClientV2(s_base.Base):
|
|
|
1033
1027
|
|
|
1034
1028
|
self.schedCoro(self._initBootProxy())
|
|
1035
1029
|
|
|
1030
|
+
def setBootUrls(self, urlinfo):
|
|
1031
|
+
|
|
1032
|
+
if not isinstance(urlinfo, (list, tuple)):
|
|
1033
|
+
urlinfo = (urlinfo,)
|
|
1034
|
+
|
|
1035
|
+
self.booturls = [chopurl(u) for u in urlinfo]
|
|
1036
|
+
|
|
1037
|
+
self.bootdeque.clear()
|
|
1038
|
+
self.bootdeque.extend(self.booturls)
|
|
1039
|
+
|
|
1036
1040
|
def getNextBootUrl(self):
|
|
1037
1041
|
if not self.bootdeque:
|
|
1038
1042
|
self.bootdeque.extend(self.booturls)
|
|
@@ -1063,13 +1067,14 @@ class ClientV2(s_base.Base):
|
|
|
1063
1067
|
|
|
1064
1068
|
# regular telepath client behavior
|
|
1065
1069
|
proxy = await openinfo(urlinfo)
|
|
1066
|
-
await self._onPoolLink(proxy, urlinfo)
|
|
1067
1070
|
|
|
1068
1071
|
async def reconnect():
|
|
1069
1072
|
if not self.isfini:
|
|
1070
1073
|
self.schedCoro(self._initBootProxy())
|
|
1071
1074
|
|
|
1072
1075
|
proxy.onfini(reconnect)
|
|
1076
|
+
|
|
1077
|
+
await self._onPoolLink(proxy, urlinfo)
|
|
1073
1078
|
return
|
|
1074
1079
|
|
|
1075
1080
|
except Exception as e:
|
|
@@ -1210,20 +1215,16 @@ class Client(s_base.Base):
|
|
|
1210
1215
|
|
|
1211
1216
|
await s_base.Base.__anit__(self)
|
|
1212
1217
|
|
|
1213
|
-
if isinstance(urlinfo, (str, dict)):
|
|
1214
|
-
urlinfo = (urlinfo,)
|
|
1215
|
-
|
|
1216
|
-
urlinfo = [chopurl(u) for u in urlinfo]
|
|
1217
|
-
|
|
1218
1218
|
if conf is None:
|
|
1219
1219
|
conf = {}
|
|
1220
1220
|
|
|
1221
1221
|
if opts is None:
|
|
1222
1222
|
opts = {}
|
|
1223
1223
|
|
|
1224
|
-
self._t_urlinfo = urlinfo
|
|
1225
1224
|
self._t_urldeque = collections.deque()
|
|
1226
1225
|
|
|
1226
|
+
self.setBootUrls(urlinfo)
|
|
1227
|
+
|
|
1227
1228
|
self._t_opts = opts
|
|
1228
1229
|
self._t_conf = conf
|
|
1229
1230
|
|
|
@@ -1247,6 +1248,16 @@ class Client(s_base.Base):
|
|
|
1247
1248
|
|
|
1248
1249
|
await self._fireLinkLoop()
|
|
1249
1250
|
|
|
1251
|
+
def setBootUrls(self, urlinfo):
|
|
1252
|
+
|
|
1253
|
+
if not isinstance(urlinfo, (list, tuple)):
|
|
1254
|
+
urlinfo = (urlinfo,)
|
|
1255
|
+
|
|
1256
|
+
self._t_urlinfo = [chopurl(u) for u in urlinfo]
|
|
1257
|
+
|
|
1258
|
+
self._t_urldeque.clear()
|
|
1259
|
+
self._t_urldeque.extend(self._t_urlinfo)
|
|
1260
|
+
|
|
1250
1261
|
def _getNextUrl(self):
|
|
1251
1262
|
if not self._t_urldeque:
|
|
1252
1263
|
self._t_urldeque.extend(self._t_urlinfo)
|
|
@@ -1263,6 +1274,7 @@ class Client(s_base.Base):
|
|
|
1263
1274
|
async def _fireLinkLoop(self):
|
|
1264
1275
|
self._t_proxy = None
|
|
1265
1276
|
self._t_ready.clear()
|
|
1277
|
+
await self.fire('tele:client:linkloop')
|
|
1266
1278
|
self.schedCoro(self._teleLinkLoop())
|
|
1267
1279
|
|
|
1268
1280
|
async def _teleLinkLoop(self):
|
|
@@ -1281,7 +1293,7 @@ class Client(s_base.Base):
|
|
|
1281
1293
|
now = time.monotonic()
|
|
1282
1294
|
if now > lastlog + 60.0: # don't logspam the disconnect message more than 1/min
|
|
1283
1295
|
url = s_urlhelp.sanitizeUrl(zipurl(urlinfo))
|
|
1284
|
-
logger.
|
|
1296
|
+
logger.warning(f'telepath client ({url}) encountered an error: {e}', exc_info=e)
|
|
1285
1297
|
lastlog = now
|
|
1286
1298
|
await self.waitfini(timeout=self._t_conf.get('retrysleep', 0.2))
|
|
1287
1299
|
|
|
@@ -1543,7 +1555,7 @@ async def openinfo(info):
|
|
|
1543
1555
|
path, name = path.split(':')
|
|
1544
1556
|
link = await s_link.unixconnect(path)
|
|
1545
1557
|
|
|
1546
|
-
|
|
1558
|
+
elif scheme in ('tcp', 'ssl'):
|
|
1547
1559
|
|
|
1548
1560
|
path = info.get('path')
|
|
1549
1561
|
name = info.get('name', path[1:])
|
|
@@ -1592,6 +1604,9 @@ async def openinfo(info):
|
|
|
1592
1604
|
|
|
1593
1605
|
link = await s_link.connect(host, port, linkinfo=linkinfo)
|
|
1594
1606
|
|
|
1607
|
+
else:
|
|
1608
|
+
raise s_exc.BadUrl(mesg=f'Invalid URL scheme: {scheme}')
|
|
1609
|
+
|
|
1595
1610
|
prox = await Proxy.anit(link, name)
|
|
1596
1611
|
prox.onfini(link)
|
|
1597
1612
|
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIEvzCCAqegAwIBAgIRAIdu+9lQ3Z2nydXmG1/p2BAwDQYJKoZIhvcNAQELBQAw
|
|
3
|
+
EjEQMA4GA1UEAwwHc3luYXBzZTAeFw0yNDA3MDgxMzAxNDBaFw0zNDA3MDYxMzAx
|
|
4
|
+
NDBaMBIxEDAOBgNVBAMMB3N5bmFwc2UwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
|
|
5
|
+
ggIKAoICAQDQ8AFyEbiRUsKdRFlm6WS5X2cp9339H3A0qsXLSRYsCZGc6oJtLX0/
|
|
6
|
+
52xPGCrKlXde2jxHU8DMDiEzQ3iVJjzDbJWXgAoNVfwrNVS1zjlSZyExVfRrCbzo
|
|
7
|
+
XpGeuNAIY/WCpsbSxM7mCVPuEZtbX2rY4XmdyBWUpd4dqoDDIK2wU329daJEVNpd
|
|
8
|
+
y9wdbZ2lLNPmKGS6Kb7Th3mio+sHpHEi6gcfYzH+mOFdWFVAh602OFMUp+fLq3nG
|
|
9
|
+
MyFHHLDC2vvPqVWf+T7Z1E8k85Zqw43TSUTwdlG6u8egC6soKQsEze6oi4fMAt0l
|
|
10
|
+
a4bgMMWDMIKJuQ4f6THEq5vKwPj0E78aT6C4C7qSKeHZSf8IOj7l3ukdgl7Sbrga
|
|
11
|
+
JCjpL1V5+EB8LTpxjjK+TDbXUwU/eKIJp/I2i7dd//nMRs9Wr2k6aIvAt9PbopA2
|
|
12
|
+
kG4tCS93TmzCza3TCtc4BruFHz92ToLfxvgcNq6N/BboDVjDIeAKtrWpe9VHPEIy
|
|
13
|
+
Eh23tAPcgPXmlOBZj4DKJ5YoGNbwYQaFDrLIHh1JzRGQbAh00JuaqDPH3kb1Q6sm
|
|
14
|
+
VjUx4QpX34qj231Bpfgu2eZX2kiLvtW+qPPfxWY2RCms1Yb+GMeKAE+9E8rak8Nq
|
|
15
|
+
oPvdqgdUUbneW1PRgBaalu7xDALH/DQm5R+baly5PEYi8gk/vsyaQwIDAQABoxAw
|
|
16
|
+
DjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4ICAQB4Asv4TuAgF2vcOdxl
|
|
17
|
+
mjPBwYueBDJrbbP2I6qjE9laO0xMyIN4Dp8ExbJyBKl/RlkSA/1cvJ7EyhlJnY1S
|
|
18
|
+
Dps8EgKS5lQw0D/bFg8JQNgNec6jCxjfytRgYkhoikabz8HR2gmUIb0On6X+dvht
|
|
19
|
+
L3Hv1/41Q4+Tig1JPRxP6C/hHcfLnCvmIsrMgKRbTGzb1AKfP8N93eZqDcA0nZo5
|
|
20
|
+
Q0p+AdLQ6ilnh8895wQexoKs7mWImEzxUdTMZlf/YSQ9Nct3OKxtYg0IOk1KW9Fe
|
|
21
|
+
sMstTDHg+/NJr2297vCmeNydYRGOTidLefebaNq0YnTm9cI3kPi/9etfUGeWHbrW
|
|
22
|
+
aXXJCQ02uiWjrL9ykiifB6f0nve0m4ENWI11FypZ3nReMNDFIYSQfwlat6E/KTQ/
|
|
23
|
+
5ih/NEgbY5KnMcUJqEKCBftfvfZyueE0frHClLZNi+YQNXD3ui6lmXzn8vmvaHeR
|
|
24
|
+
dDfCifQ5TGHOlNmk9LMOv1Szx9CNswUwKDpSLklFp2lzI0JHTXm+NYCqeE+3cnrN
|
|
25
|
+
vbsq55txmImj/Ekos5/kuv3Z2myJsDd2xT2eZ/QEkb7FOeO5RPrya3yXoSGNlkgs
|
|
26
|
+
XG8vvCDNTeD6BJPWHjbu0ksZ6nxBFRsEmA2Ni8Y9ROUXUuJtwX+sYqHfAAVMLbiR
|
|
27
|
+
wSujqDSopMoJSGr0hUT9kjbUSg==
|
|
28
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
|
2
|
+
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
|
|
51
|
+
-----END RSA PRIVATE KEY-----
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
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
|
|
29
|
+
KjhaMLwW7zaGUYFkdR1vcn3qeFnAM9cmBQ==
|
|
30
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
|
2
|
+
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
|
|
51
|
+
-----END RSA PRIVATE KEY-----
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIE9jCCAt6gAwIBAgIRAJGsran8ISfoaXuIMN7vAIAwDQYJKoZIhvcNAQELBQAw
|
|
3
|
+
EjEQMA4GA1UEAwwHc3luYXBzZTAeFw0yNDA3MDgxMzAxNDFaFw0zNDA3MDYxMzAx
|
|
4
|
+
NDFaMBcxFTATBgNVBAMMDHJvb3RAc3luYXBzZTCCAiIwDQYJKoZIhvcNAQEBBQAD
|
|
5
|
+
ggIPADCCAgoCggIBAL42zY6E1q0RJIr9j+T6bPb7/f0RbwLJ2hza0/4qjAisNGQs
|
|
6
|
+
t1WkWvpNR/l0+JHmXw78KQ1k8/WP+niIXZmakZdrMNQOf+BBY+MoNqFHtA1KoP0p
|
|
7
|
+
b7f0hyQyRprYihSllA3uFZEagaylx9z5TliwclnCvB77whRZFU8f5PXH+wibWFvJ
|
|
8
|
+
n4ycdFVLg93Rb6IiliMytc3CA4TEemDiL5410nZNipWGcYRmTUruWZCADYLSh6D+
|
|
9
|
+
VJvY/sfoteBX1cvhCdL6DORKaxZnXsPthzkDPJYgLn+1E9hJ4vhuqgXIJ7VjqrPZ
|
|
10
|
+
0wJtciZYb9YcJM6OqiWavW8AeLOEySEKO4NEGU0JduFpu4/9xnfhv/Atdv9YwK6j
|
|
11
|
+
mJmxl/bV9dPhjszNG/D+RbCeBdhWebL1zcnt8indigLxSI9UgulBnjCJg4xHrJPO
|
|
12
|
+
9tiXPi4ipFL4tIpiW4NYCWnJXAkCNgPBFGeFaEmzAxoiSh/iBIMfUgfMV26HzOUS
|
|
13
|
+
2MAzq04/2nH4MjsZYtIKNx8sNZvC3QnDVH1ncGC8JcbSVZPH2jBmMRJJjhxDT7wM
|
|
14
|
+
JbgJJomJ1mIP3a03FJpLTCxP8IbBTmq3TuOpqmhmiVHjBunACbNf6l6fhOJG3pMk
|
|
15
|
+
+VpWtIUiKyNMXvjxgM5bKi6sx1ivInxmPk0f2BPBTrYeLFCTj711A4XuHxSzAgMB
|
|
16
|
+
AAGjQjBAMBEGCWCGSAGG+EIBAQQEAwIHgDALBgNVHQ8EBAMCB4AwEwYDVR0lBAww
|
|
17
|
+
CgYIKwYBBQUHAwIwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAgEANZtBnHeo
|
|
18
|
+
yatrA/s2BzOU0k4WGEUaFMrCi6cDyVAWQ6mhcQHqJ2C8Yi2xCd5Si2BEC0hiyJ4K
|
|
19
|
+
wOpi/bkoyAh67bX/RchzqLTwfUYyM17ZH5yiqbPufjpJQAitAVaywCI0jXDpaYlM
|
|
20
|
+
o2u6b3u8eUKhlfHSIzTJn1sVc0p0Ql0okhrHwwUfwN1lwkVDR/e+jF5GKAwjnkNc
|
|
21
|
+
yu3yYYz0oHAg6ZOcQaaFASX7oBBpYnHfDvou3uoJTGfKevRgI5NwQDRG3gipudSi
|
|
22
|
+
vIwWR2iyBjTZaICChmaBX7zVHLwOFN0LRv73tgEBcJwZ4oCvE64POpAL2pO+U52d
|
|
23
|
+
fIFlIOPSuILtTTtBRvfTuIjEvVCF44g4JkPgPpaN9yPcdAOnBQkP7RkrMlQ1pKZ3
|
|
24
|
+
S6uZh9Ar0jNx59ijYq2Y8o/yyEVveXIKbp3HLogfcLeEWUqjL3syP72WkfBWRWx9
|
|
25
|
+
QELaYrFFxgtT4bKZSmyK4C4qwgSknm89Xp/JZFyKWAjYEmu9BAHDI29IBVbLzQAS
|
|
26
|
+
ezrtG2CmyhejnGhwSMYNmv+dC+ahSeP5FQiixrrxaTJ0s3Ax5mvbQQqv9lBvkn9Z
|
|
27
|
+
WpVNN5MHdHEWnvbK4kfFnVQIBfv3lvPl0C0vk3VSWZexXIOjNtkUK6/ALHV2n5AA
|
|
28
|
+
BEJmC3OPyT3eNrlr7gCxuMoV6uDMeTCRpTY=
|
|
29
|
+
-----END CERTIFICATE-----
|