synapse 2.210.0__py311-none-any.whl → 2.212.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/base.py +2 -3
- synapse/lib/node.py +8 -3
- synapse/lib/schemas.py +10 -1
- synapse/lib/share.py +0 -3
- synapse/lib/snap.py +11 -2
- synapse/lib/stormlib/json.py +1 -1
- synapse/lib/stormtypes.py +2 -2
- synapse/lib/version.py +2 -2
- synapse/models/inet.py +110 -3
- synapse/models/orgs.py +0 -1
- synapse/tests/test_lib_base.py +5 -0
- synapse/tests/test_lib_config.py +8 -2
- synapse/tests/test_lib_layer.py +2 -2
- synapse/tests/test_lib_storm.py +31 -2
- synapse/tests/test_lib_stormhttp.py +6 -6
- synapse/tests/test_lib_stormlib_json.py +4 -1
- synapse/tests/test_lib_stormtypes.py +16 -18
- synapse/tests/test_lib_view.py +14 -0
- synapse/tests/test_model_inet.py +57 -4
- synapse/tests/test_model_orgs.py +18 -2
- synapse/tests/test_tools_genpkg.py +9 -0
- synapse/tests/utils.py +4 -0
- synapse/tools/autodoc.py +8 -2
- synapse/tools/genpkg.py +9 -2
- synapse/tools/rstorm.py +8 -2
- {synapse-2.210.0.dist-info → synapse-2.212.0.dist-info}/METADATA +1 -1
- {synapse-2.210.0.dist-info → synapse-2.212.0.dist-info}/RECORD +30 -30
- {synapse-2.210.0.dist-info → synapse-2.212.0.dist-info}/WHEEL +1 -1
- {synapse-2.210.0.dist-info → synapse-2.212.0.dist-info}/licenses/LICENSE +0 -0
- {synapse-2.210.0.dist-info → synapse-2.212.0.dist-info}/top_level.txt +0 -0
synapse/lib/base.py
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import gc
|
|
2
2
|
import os
|
|
3
|
+
import sys
|
|
3
4
|
import atexit
|
|
4
5
|
import signal
|
|
5
6
|
import asyncio
|
|
@@ -82,7 +83,7 @@ class Base:
|
|
|
82
83
|
'''
|
|
83
84
|
def __init__(self):
|
|
84
85
|
self.anitted = False
|
|
85
|
-
assert
|
|
86
|
+
assert sys._getframe(1).f_code.co_name == 'anit', 'Objects from Base must be constructed solely via "anit"'
|
|
86
87
|
|
|
87
88
|
@classmethod
|
|
88
89
|
async def anit(cls, *args, **kwargs):
|
|
@@ -129,7 +130,6 @@ class Base:
|
|
|
129
130
|
self.isfini = False
|
|
130
131
|
self.anitted = True # For assertion purposes
|
|
131
132
|
self.finievt = asyncio.Event()
|
|
132
|
-
self.entered = False
|
|
133
133
|
|
|
134
134
|
# hold a weak ref to other bases we should fini if they
|
|
135
135
|
# are still around when we go down...
|
|
@@ -205,7 +205,6 @@ class Base:
|
|
|
205
205
|
|
|
206
206
|
async def __aenter__(self):
|
|
207
207
|
assert asyncio.get_running_loop() == self.loop
|
|
208
|
-
self.entered = True
|
|
209
208
|
return self
|
|
210
209
|
|
|
211
210
|
async def __aexit__(self, exc, cls, tb):
|
synapse/lib/node.py
CHANGED
|
@@ -181,7 +181,7 @@ class Node:
|
|
|
181
181
|
|
|
182
182
|
if prop.modl.form(prop.type.name) is not None:
|
|
183
183
|
buid = s_common.buid((prop.type.name, valu))
|
|
184
|
-
elif prop.type.name == 'ndef':
|
|
184
|
+
elif prop.type.name == 'ndef' or 'ndef' in prop.type.info.get('bases'):
|
|
185
185
|
buid = s_common.buid(valu)
|
|
186
186
|
else:
|
|
187
187
|
return None
|
|
@@ -207,8 +207,13 @@ class Node:
|
|
|
207
207
|
|
|
208
208
|
embdnode = retn.get(nodepath)
|
|
209
209
|
if embdnode is None:
|
|
210
|
-
|
|
211
|
-
|
|
210
|
+
iden = node.iden()
|
|
211
|
+
# TODO deprecate / remove use of * once we can minver optic
|
|
212
|
+
embdnode = retn[nodepath] = {
|
|
213
|
+
'*': iden,
|
|
214
|
+
'$iden': iden,
|
|
215
|
+
'$form': node.form.name,
|
|
216
|
+
}
|
|
212
217
|
|
|
213
218
|
for relp in relprops:
|
|
214
219
|
embdnode[relp] = node.props.get(relp)
|
synapse/lib/schemas.py
CHANGED
|
@@ -668,9 +668,18 @@ _reqValidPkgdefSchema = {
|
|
|
668
668
|
'pattern': s_version.semverstr,
|
|
669
669
|
},
|
|
670
670
|
'build': {
|
|
671
|
-
'type' 'object'
|
|
671
|
+
'type': 'object',
|
|
672
672
|
'properties': {
|
|
673
673
|
'time': {'type': 'number'},
|
|
674
|
+
'synapse:version': {
|
|
675
|
+
'type': 'string',
|
|
676
|
+
'pattern': s_version.semverstr
|
|
677
|
+
},
|
|
678
|
+
'synapse:commit': {
|
|
679
|
+
'type': 'string',
|
|
680
|
+
# Note: This pattern allows empty string for dev environments
|
|
681
|
+
'pattern': '^[0-9a-fA-F]*$'
|
|
682
|
+
},
|
|
674
683
|
},
|
|
675
684
|
'required': ['time'],
|
|
676
685
|
},
|
synapse/lib/share.py
CHANGED
synapse/lib/snap.py
CHANGED
|
@@ -303,6 +303,9 @@ class ProtoNode:
|
|
|
303
303
|
self.tags[tagnode.valu] = valu
|
|
304
304
|
return tagnode
|
|
305
305
|
|
|
306
|
+
elif valu == (None, None):
|
|
307
|
+
return tagnode
|
|
308
|
+
|
|
306
309
|
valu = s_time.ival(*valu, *curv)
|
|
307
310
|
self.tags[tagnode.valu] = valu
|
|
308
311
|
|
|
@@ -743,19 +746,25 @@ class Snap(s_base.Base):
|
|
|
743
746
|
|
|
744
747
|
async def _joinEmbedStor(self, storage, embeds):
|
|
745
748
|
for nodePath, relProps in embeds.items():
|
|
749
|
+
|
|
746
750
|
await asyncio.sleep(0)
|
|
747
|
-
|
|
751
|
+
|
|
752
|
+
iden = relProps.get('$iden')
|
|
748
753
|
if not iden:
|
|
749
754
|
continue
|
|
750
755
|
|
|
751
756
|
stor = await self.view.getStorNodes(s_common.uhex(iden))
|
|
752
757
|
for relProp in relProps.keys():
|
|
758
|
+
|
|
753
759
|
await asyncio.sleep(0)
|
|
754
|
-
|
|
760
|
+
|
|
761
|
+
if relProp[0] in ('*', '$'):
|
|
755
762
|
continue
|
|
756
763
|
|
|
757
764
|
for idx, layrstor in enumerate(stor):
|
|
765
|
+
|
|
758
766
|
await asyncio.sleep(0)
|
|
767
|
+
|
|
759
768
|
props = layrstor.get('props')
|
|
760
769
|
if not props:
|
|
761
770
|
continue
|
synapse/lib/stormlib/json.py
CHANGED
|
@@ -134,7 +134,7 @@ class JsonLib(s_stormtypes.Lib):
|
|
|
134
134
|
|
|
135
135
|
@s_stormtypes.stormfunc(readonly=True)
|
|
136
136
|
async def _jsonSchema(self, schema, use_default=True):
|
|
137
|
-
schema = await s_stormtypes.toprim(schema)
|
|
137
|
+
schema = await s_stormtypes.toprim(schema, use_list=True)
|
|
138
138
|
use_default = await s_stormtypes.tobool(use_default)
|
|
139
139
|
# We have to ensure that we have a valid schema for making the object.
|
|
140
140
|
try:
|
synapse/lib/stormtypes.py
CHANGED
|
@@ -6210,9 +6210,9 @@ class NodeData(Prim):
|
|
|
6210
6210
|
{'name': 'valu', 'type': 'prim', 'desc': 'The data to store.', },
|
|
6211
6211
|
),
|
|
6212
6212
|
'returns': {'type': 'null', }}},
|
|
6213
|
-
{'name': 'list', 'desc': 'Get a list of the Node data
|
|
6213
|
+
{'name': 'list', 'desc': 'Get a list of the Node data on the Node as (name, value) tuples.',
|
|
6214
6214
|
'type': {'type': 'function', '_funcname': '_listNodeData',
|
|
6215
|
-
'returns': {'type': 'list', 'desc': 'List of
|
|
6215
|
+
'returns': {'type': 'list', 'desc': 'List of (name, value) tuples stored on the node.', }}},
|
|
6216
6216
|
{'name': 'load',
|
|
6217
6217
|
'desc': 'Load the Node data onto the Node so that the Node data is packed and returned by the runtime.',
|
|
6218
6218
|
'type': {'type': 'function', '_funcname': '_loadNodeData',
|
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, 212, 0)
|
|
227
227
|
verstring = '.'.join([str(x) for x in version])
|
|
228
|
-
commit = '
|
|
228
|
+
commit = '68ec8184b0e2469fd1ef30cbeb29f5989c60c768'
|
synapse/models/inet.py
CHANGED
|
@@ -35,6 +35,10 @@ ipv4max = 2 ** 32 - 1
|
|
|
35
35
|
|
|
36
36
|
rfc6598 = ipaddress.IPv4Network('100.64.0.0/10')
|
|
37
37
|
|
|
38
|
+
# defined from https://x.com/4A4133/status/1887269972545839559
|
|
39
|
+
ja4_regex = r'^([tqd])([sd\d]\d)([di])(\d{2})(\d{2})([a-zA-Z0-9]{2})_([0-9a-f]{12})_([0-9a-f]{12})$'
|
|
40
|
+
ja4s_regex = r'^([tq])([sd\d]\d)(\d{2})([a-zA-Z0-9]{2})_([0-9a-f]{4})_([0-9a-f]{12})$'
|
|
41
|
+
|
|
38
42
|
def getAddrType(ip):
|
|
39
43
|
|
|
40
44
|
if ip.is_multicast:
|
|
@@ -1535,6 +1539,11 @@ class InetModule(s_module.CoreModule):
|
|
|
1535
1539
|
('inet:service:platform', ('guid', {}), {
|
|
1536
1540
|
'doc': 'A network platform which provides services.'}),
|
|
1537
1541
|
|
|
1542
|
+
('inet:service:app', ('guid', {}), {
|
|
1543
|
+
'interfaces': ('inet:service:object',),
|
|
1544
|
+
'template': {'service:base': 'application'},
|
|
1545
|
+
'doc': 'A platform specific application.'}),
|
|
1546
|
+
|
|
1538
1547
|
('inet:service:instance', ('guid', {}), {
|
|
1539
1548
|
'doc': 'An instance of the platform such as Slack or Discord instances.'}),
|
|
1540
1549
|
|
|
@@ -1626,6 +1635,10 @@ class InetModule(s_module.CoreModule):
|
|
|
1626
1635
|
'template': {'service:base': 'emote'},
|
|
1627
1636
|
'doc': 'An emote or reaction by an account.'}),
|
|
1628
1637
|
|
|
1638
|
+
('inet:service:access:action:taxonomy', ('taxonomy', {}), {
|
|
1639
|
+
'interfaces': ('meta:taxonomy',),
|
|
1640
|
+
'doc': 'A hierarchical taxonomy of service actions.'}),
|
|
1641
|
+
|
|
1629
1642
|
('inet:service:access', ('guid', {}), {
|
|
1630
1643
|
'interfaces': ('inet:service:action',),
|
|
1631
1644
|
'doc': 'Represents a user access request to a service resource.'}),
|
|
@@ -1669,6 +1682,18 @@ class InetModule(s_module.CoreModule):
|
|
|
1669
1682
|
('inet:tls:handshake', ('guid', {}), {
|
|
1670
1683
|
'doc': 'An instance of a TLS handshake between a server and client.'}),
|
|
1671
1684
|
|
|
1685
|
+
('inet:tls:ja4', ('str', {'strip': True, 'regex': ja4_regex}), {
|
|
1686
|
+
'doc': 'A JA4 TLS client fingerprint.'}),
|
|
1687
|
+
|
|
1688
|
+
('inet:tls:ja4s', ('str', {'strip': True, 'regex': ja4s_regex}), {
|
|
1689
|
+
'doc': 'A JA4S TLS server fingerprint.'}),
|
|
1690
|
+
|
|
1691
|
+
('inet:tls:ja4:sample', ('comp', {'fields': (('client', 'inet:client'), ('ja4', 'inet:tls:ja4'))}), {
|
|
1692
|
+
'doc': 'A JA4 TLS client fingerprint used by a client.'}),
|
|
1693
|
+
|
|
1694
|
+
('inet:tls:ja4s:sample', ('comp', {'fields': (('server', 'inet:server'), ('ja4s', 'inet:tls:ja4s'))}), {
|
|
1695
|
+
'doc': 'A JA4S TLS server fingerprint used by a server.'}),
|
|
1696
|
+
|
|
1672
1697
|
('inet:tls:ja3s:sample', ('comp', {'fields': (('server', 'inet:server'), ('ja3s', 'hash:md5'))}), {
|
|
1673
1698
|
'doc': 'A JA3 sample taken from a server.'}),
|
|
1674
1699
|
|
|
@@ -1774,6 +1799,9 @@ class InetModule(s_module.CoreModule):
|
|
|
1774
1799
|
'interfaces': ('inet:service:base',),
|
|
1775
1800
|
'props': (
|
|
1776
1801
|
|
|
1802
|
+
('app', ('inet:service:app', {}), {
|
|
1803
|
+
'doc': 'The app which handled the action.'}),
|
|
1804
|
+
|
|
1777
1805
|
('time', ('time', {}), {
|
|
1778
1806
|
'doc': 'The time that the account initiated the action.'}),
|
|
1779
1807
|
|
|
@@ -1807,6 +1835,9 @@ class InetModule(s_module.CoreModule):
|
|
|
1807
1835
|
('client:host', ('it:host', {}), {
|
|
1808
1836
|
'doc': 'The client host which initiated the action.'}),
|
|
1809
1837
|
|
|
1838
|
+
('client:app', ('inet:service:app', {}), {
|
|
1839
|
+
'doc': 'The client service app which initiated the action.'}),
|
|
1840
|
+
|
|
1810
1841
|
('server', ('inet:server', {}), {
|
|
1811
1842
|
'doc': 'The network address of the server which handled the action.'}),
|
|
1812
1843
|
|
|
@@ -3550,23 +3581,70 @@ class InetModule(s_module.CoreModule):
|
|
|
3550
3581
|
'doc': 'The server that was sampled to compute the JARM hash.'}),
|
|
3551
3582
|
)),
|
|
3552
3583
|
|
|
3584
|
+
('inet:tls:ja4', {}, ()),
|
|
3585
|
+
('inet:tls:ja4s', {}, ()),
|
|
3586
|
+
|
|
3587
|
+
('inet:tls:ja4:sample', {}, (
|
|
3588
|
+
|
|
3589
|
+
('ja4', ('inet:tls:ja4', {}), {
|
|
3590
|
+
'ro': True,
|
|
3591
|
+
'doc': 'The JA4 TLS client fingerprint.'}),
|
|
3592
|
+
|
|
3593
|
+
('client', ('inet:client', {}), {
|
|
3594
|
+
'ro': True,
|
|
3595
|
+
'doc': 'The client which initiated the TLS handshake with a JA4 fingerprint.'}),
|
|
3596
|
+
)),
|
|
3597
|
+
|
|
3598
|
+
('inet:tls:ja4s:sample', {}, (
|
|
3599
|
+
|
|
3600
|
+
('ja4s', ('inet:tls:ja4s', {}), {
|
|
3601
|
+
'ro': True,
|
|
3602
|
+
'doc': 'The JA4S TLS server fingerprint.'}),
|
|
3603
|
+
|
|
3604
|
+
('server', ('inet:server', {}), {
|
|
3605
|
+
'ro': True,
|
|
3606
|
+
'doc': 'The server which responded to the TLS handshake with a JA4S fingerprint.'}),
|
|
3607
|
+
)),
|
|
3608
|
+
|
|
3553
3609
|
('inet:tls:handshake', {}, (
|
|
3610
|
+
|
|
3554
3611
|
('time', ('time', {}), {
|
|
3555
3612
|
'doc': 'The time the handshake was initiated.'}),
|
|
3613
|
+
|
|
3556
3614
|
('flow', ('inet:flow', {}), {
|
|
3557
3615
|
'doc': 'The raw inet:flow associated with the handshake.'}),
|
|
3616
|
+
|
|
3558
3617
|
('server', ('inet:server', {}), {
|
|
3559
3618
|
'doc': 'The TLS server during the handshake.'}),
|
|
3619
|
+
|
|
3560
3620
|
('server:cert', ('crypto:x509:cert', {}), {
|
|
3561
3621
|
'doc': 'The x509 certificate sent by the server during the handshake.'}),
|
|
3562
|
-
|
|
3563
|
-
|
|
3622
|
+
|
|
3623
|
+
('server:ja3s', ('hash:md5', {}), {
|
|
3624
|
+
'doc': 'The JA3S fingerprint of the server response.'}),
|
|
3625
|
+
|
|
3626
|
+
('server:ja4s', ('inet:tls:ja4s', {}), {
|
|
3627
|
+
'doc': 'The JA4S fingerprint of the server response.'}),
|
|
3628
|
+
|
|
3564
3629
|
('client', ('inet:client', {}), {
|
|
3565
3630
|
'doc': 'The TLS client during the handshake.'}),
|
|
3631
|
+
|
|
3566
3632
|
('client:cert', ('crypto:x509:cert', {}), {
|
|
3567
3633
|
'doc': 'The x509 certificate sent by the client during the handshake.'}),
|
|
3634
|
+
|
|
3635
|
+
('client:ja3', ('hash:md5', {}), {
|
|
3636
|
+
'doc': 'The JA3 fingerprint of the client request.'}),
|
|
3637
|
+
|
|
3638
|
+
('client:ja4', ('inet:tls:ja4', {}), {
|
|
3639
|
+
'doc': 'The JA4 fingerprint of the client request.'}),
|
|
3640
|
+
|
|
3568
3641
|
('client:fingerprint:ja3', ('hash:md5', {}), {
|
|
3569
|
-
'
|
|
3642
|
+
'deprecated': True,
|
|
3643
|
+
'doc': 'Deprecated. Please use :client:ja3.'}),
|
|
3644
|
+
|
|
3645
|
+
('server:fingerprint:ja3', ('hash:md5', {}), {
|
|
3646
|
+
'deprecated': True,
|
|
3647
|
+
'doc': 'Deprecated. Please use :server:ja3s.'}),
|
|
3570
3648
|
)),
|
|
3571
3649
|
|
|
3572
3650
|
('inet:tls:ja3s:sample', {}, (
|
|
@@ -3608,12 +3686,22 @@ class InetModule(s_module.CoreModule):
|
|
|
3608
3686
|
|
|
3609
3687
|
('url', ('inet:url', {}), {
|
|
3610
3688
|
'ex': 'https://twitter.com',
|
|
3689
|
+
'alts': ('urls',),
|
|
3611
3690
|
'doc': 'The primary URL of the platform.'}),
|
|
3612
3691
|
|
|
3692
|
+
('urls', ('array', {'type': 'inet:url', 'sorted': True, 'uniq': True}), {
|
|
3693
|
+
'doc': 'An array of alternate URLs for the platform.'}),
|
|
3694
|
+
|
|
3613
3695
|
('name', ('str', {'onespace': True, 'lower': True}), {
|
|
3614
3696
|
'ex': 'twitter',
|
|
3697
|
+
'alts': ('names',),
|
|
3615
3698
|
'doc': 'A friendly name for the platform.'}),
|
|
3616
3699
|
|
|
3700
|
+
('names', ('array', {'type': 'str',
|
|
3701
|
+
'typeopts': {'onespace': True, 'lower': True},
|
|
3702
|
+
'sorted': True, 'uniq': True}), {
|
|
3703
|
+
'doc': 'An array of alternate names for the platform.'}),
|
|
3704
|
+
|
|
3617
3705
|
('desc', ('str', {}), {
|
|
3618
3706
|
'disp': {'hint': 'text'},
|
|
3619
3707
|
'doc': 'A description of the service platform.'}),
|
|
@@ -3662,6 +3750,22 @@ class InetModule(s_module.CoreModule):
|
|
|
3662
3750
|
'doc': 'The tenant which contains the instance.'}),
|
|
3663
3751
|
)),
|
|
3664
3752
|
|
|
3753
|
+
('inet:service:app', {}, (
|
|
3754
|
+
|
|
3755
|
+
('name', ('str', {'lower': True, 'onespace': True}), {
|
|
3756
|
+
'alts': ('names',),
|
|
3757
|
+
'doc': 'The name of the platform specific application.'}),
|
|
3758
|
+
|
|
3759
|
+
('names', ('array', {'type': 'str',
|
|
3760
|
+
'typeopts': {'onespace': True, 'lower': True},
|
|
3761
|
+
'sorted': True, 'uniq': True}), {
|
|
3762
|
+
'doc': 'An array of alternate names for the application.'}),
|
|
3763
|
+
|
|
3764
|
+
('desc', ('str', {}), {
|
|
3765
|
+
'disp': {'hint': 'text'},
|
|
3766
|
+
'doc': 'A description of the platform specific application.'}),
|
|
3767
|
+
)),
|
|
3768
|
+
|
|
3665
3769
|
('inet:service:account', {}, (
|
|
3666
3770
|
|
|
3667
3771
|
('user', ('inet:user', {}), {
|
|
@@ -3937,6 +4041,9 @@ class InetModule(s_module.CoreModule):
|
|
|
3937
4041
|
|
|
3938
4042
|
('inet:service:access', {}, (
|
|
3939
4043
|
|
|
4044
|
+
('action', ('inet:service:access:action:taxonomy', {}), {
|
|
4045
|
+
'doc': 'The platform specific action which this access records.'}),
|
|
4046
|
+
|
|
3940
4047
|
('resource', ('inet:service:resource', {}), {
|
|
3941
4048
|
'doc': 'The resource which the account attempted to access.'}),
|
|
3942
4049
|
|
synapse/models/orgs.py
CHANGED
|
@@ -1241,7 +1241,6 @@ class OuModule(s_module.CoreModule):
|
|
|
1241
1241
|
)),
|
|
1242
1242
|
('ou:conference:event', {}, (
|
|
1243
1243
|
('conference', ('ou:conference', {}), {
|
|
1244
|
-
'ro': True,
|
|
1245
1244
|
'doc': 'The conference to which the event is associated.',
|
|
1246
1245
|
}),
|
|
1247
1246
|
('organizer', ('ps:contact', {}), {
|
synapse/tests/test_lib_base.py
CHANGED
|
@@ -86,6 +86,11 @@ class BaseTest(s_t_utils.SynTest):
|
|
|
86
86
|
await Hehe.anit(-1)
|
|
87
87
|
self.eq(cm.exception.get('mesg'), 'boom')
|
|
88
88
|
|
|
89
|
+
if __debug__:
|
|
90
|
+
with self.raises(AssertionError) as cm:
|
|
91
|
+
Hehe()
|
|
92
|
+
self.eq(str(cm.exception), 'Objects from Base must be constructed solely via "anit"')
|
|
93
|
+
|
|
89
94
|
async def test_coro_fini(self):
|
|
90
95
|
|
|
91
96
|
event = asyncio.Event()
|
synapse/tests/test_lib_config.py
CHANGED
|
@@ -164,8 +164,8 @@ class ConfTest(s_test.SynTest):
|
|
|
164
164
|
# We can ensure that certain vars are loaded
|
|
165
165
|
self.eq('Funky string time!', conf.req('key:string'))
|
|
166
166
|
# And throw if they are not, or if the requested key isn't even schema valid
|
|
167
|
-
self.raises(s_exc.NeedConfValu, conf.
|
|
168
|
-
self.raises(s_exc.BadArg, conf.
|
|
167
|
+
self.raises(s_exc.NeedConfValu, conf.req, 'key:bool:nodefval')
|
|
168
|
+
self.raises(s_exc.BadArg, conf.req, 'key:newp')
|
|
169
169
|
|
|
170
170
|
# Since we're an Mutable mapping, we have some dict methods available to us
|
|
171
171
|
self.len(8, conf) # __len__
|
|
@@ -380,6 +380,12 @@ class ConfTest(s_test.SynTest):
|
|
|
380
380
|
self.eq(item['key:number'], 123)
|
|
381
381
|
self.notin('key:string', item)
|
|
382
382
|
|
|
383
|
+
item = validator({'key:multi': 123})
|
|
384
|
+
self.eq(item['key:multi'], 123)
|
|
385
|
+
|
|
386
|
+
item = validator({'key:multi': '123'})
|
|
387
|
+
self.eq(item['key:multi'], '123')
|
|
388
|
+
|
|
383
389
|
async def test_config_ref_handler(self):
|
|
384
390
|
|
|
385
391
|
filename = pathlib.Path(s_data.path(
|
synapse/tests/test_lib_layer.py
CHANGED
|
@@ -1399,8 +1399,8 @@ class LayerTest(s_t_utils.SynTest):
|
|
|
1399
1399
|
self.len(1, nodes)
|
|
1400
1400
|
self.eq(nodes[0].ndef, ('inet:ipv4', 0x01020304))
|
|
1401
1401
|
self.eq(nodes[0].get('asn'), 33)
|
|
1402
|
-
self.
|
|
1403
|
-
self.
|
|
1402
|
+
self.eq(nodes[0].getTag('foo.bar'), (None, None))
|
|
1403
|
+
self.eq(nodes[0].getTagProp('foo.bar', 'confidence'), 100)
|
|
1404
1404
|
|
|
1405
1405
|
self.eq(10004, await core.count('.created'))
|
|
1406
1406
|
self.len(2, await core.nodes('syn:tag~=foo'))
|
synapse/tests/test_lib_storm.py
CHANGED
|
@@ -2251,16 +2251,18 @@ class StormTest(s_t_utils.SynTest):
|
|
|
2251
2251
|
nodes = [m[1] for m in msgs if m[0] == 'node']
|
|
2252
2252
|
|
|
2253
2253
|
node = nodes[0]
|
|
2254
|
+
self.eq('inet:asn', node[1]['embeds']['asn']['$form'])
|
|
2254
2255
|
self.eq('hehe', node[1]['embeds']['asn']['name'])
|
|
2255
|
-
self.eq('796d67b92a6ffe9b88fa19d115b46ab6712d673a06ae602d41de84b1464782f2', node[1]['embeds']['asn']['
|
|
2256
|
+
self.eq('796d67b92a6ffe9b88fa19d115b46ab6712d673a06ae602d41de84b1464782f2', node[1]['embeds']['asn']['$iden'])
|
|
2256
2257
|
|
|
2257
2258
|
opts = {'embeds': {'ou:org': {'hq::email': ('user',)}}}
|
|
2258
2259
|
msgs = await core.stormlist('[ ou:org=* :country=* :hq=* ] { -> ps:contact [ :email=visi@vertex.link ] }', opts=opts)
|
|
2259
2260
|
nodes = [m[1] for m in msgs if m[0] == 'node']
|
|
2260
2261
|
node = nodes[0]
|
|
2261
2262
|
|
|
2263
|
+
self.eq('inet:email', node[1]['embeds']['hq::email']['$form'])
|
|
2262
2264
|
self.eq('visi', node[1]['embeds']['hq::email']['user'])
|
|
2263
|
-
self.eq('2346d7bed4b0fae05e00a413bbf8716c9e08857eb71a1ecf303b8972823f2899', node[1]['embeds']['hq::email']['
|
|
2265
|
+
self.eq('2346d7bed4b0fae05e00a413bbf8716c9e08857eb71a1ecf303b8972823f2899', node[1]['embeds']['hq::email']['$iden'])
|
|
2264
2266
|
|
|
2265
2267
|
fork = await core.callStorm('return($lib.view.get().fork().iden)')
|
|
2266
2268
|
|
|
@@ -2373,10 +2375,17 @@ class StormTest(s_t_utils.SynTest):
|
|
|
2373
2375
|
self.eq(['inet:service:rule', 'risk:vulnerable'], [n[0][0] for n in nodes])
|
|
2374
2376
|
|
|
2375
2377
|
embeds = nodes[0][1]['embeds']
|
|
2378
|
+
|
|
2379
|
+
self.nn(embeds['object']['$iden'])
|
|
2380
|
+
self.eq('risk:vulnerable', embeds['object']['$form'])
|
|
2376
2381
|
self.eq(1, embeds['object']['mitigated'])
|
|
2377
2382
|
self.eq(None, embeds['object']['newp'])
|
|
2383
|
+
|
|
2384
|
+
self.nn(embeds['object::node']['$iden'])
|
|
2385
|
+
self.eq('it:prod:hardware', embeds['object::node']['$form'])
|
|
2378
2386
|
self.eq('foohw', embeds['object::node']['name'])
|
|
2379
2387
|
self.eq(None, embeds['object::node']['newp'])
|
|
2388
|
+
self.eq('inet:service:account', embeds['grantee']['$form'])
|
|
2380
2389
|
self.eq('foocon', embeds['grantee']['id'])
|
|
2381
2390
|
self.eq(None, embeds['grantee']['newp'])
|
|
2382
2391
|
|
|
@@ -2384,6 +2393,26 @@ class StormTest(s_t_utils.SynTest):
|
|
|
2384
2393
|
self.eq('barvuln', embeds['vuln']['name'])
|
|
2385
2394
|
self.eq('foohw', embeds['node']['name'])
|
|
2386
2395
|
|
|
2396
|
+
# embed through `econ:pay:instrument` type that extends from `ndef`
|
|
2397
|
+
await core.nodes('''
|
|
2398
|
+
[ econ:acct:payment=* :from:instrument={ [ econ:pay:card=(testcard,) :name=infime ] } ]
|
|
2399
|
+
''')
|
|
2400
|
+
|
|
2401
|
+
opts = {
|
|
2402
|
+
'embeds': {
|
|
2403
|
+
'econ:acct:payment': {
|
|
2404
|
+
'from:instrument': ['name'],
|
|
2405
|
+
}
|
|
2406
|
+
}
|
|
2407
|
+
}
|
|
2408
|
+
msgs = await core.stormlist('econ:acct:payment', opts=opts)
|
|
2409
|
+
node = [m[1] for m in msgs if m[0] == 'node'][0]
|
|
2410
|
+
self.eq('econ:acct:payment', node[0][0])
|
|
2411
|
+
|
|
2412
|
+
embeds = node[1]['embeds']
|
|
2413
|
+
self.eq('86caf7a47348d56b2f6bec3e767a9fc7eaaaf5a80d7bbaa235fab763c7dcc560', embeds['from:instrument']['*'])
|
|
2414
|
+
self.eq('infime', embeds['from:instrument']['name'])
|
|
2415
|
+
|
|
2387
2416
|
async def test_storm_wget(self):
|
|
2388
2417
|
|
|
2389
2418
|
async def _getRespFromSha(core, mesgs):
|
|
@@ -642,9 +642,9 @@ class StormHttpTest(s_test.SynTest):
|
|
|
642
642
|
self.isin('connect to proxy 127.0.0.1:1', resp['mesg'])
|
|
643
643
|
|
|
644
644
|
q = '$resp=$lib.inet.http.get("http://vertex.link") return(($resp.code, $resp.err))'
|
|
645
|
-
code, (errname,
|
|
645
|
+
code, (errname, errinfo) = await core.callStorm(q)
|
|
646
646
|
self.eq(code, -1)
|
|
647
|
-
self.
|
|
647
|
+
self.isin("connect to proxy 127.0.0.1:1", errinfo.get('mesg'))
|
|
648
648
|
|
|
649
649
|
msgs = await core.stormlist('$resp=$lib.inet.http.get("http://vertex.link", proxy=(null)) $lib.print($resp.err)')
|
|
650
650
|
self.stormIsInWarn('HTTP proxy argument to $lib.null is deprecated', msgs)
|
|
@@ -669,7 +669,7 @@ class StormHttpTest(s_test.SynTest):
|
|
|
669
669
|
self.stormIsInErr(errmsg.format(perm='storm.lib.inet.http.proxy'), msgs)
|
|
670
670
|
|
|
671
671
|
resp = await core.callStorm('return($lib.inet.http.get(http://vertex.link, proxy=socks5://user:pass@127.0.0.1:1))')
|
|
672
|
-
self.
|
|
672
|
+
self.isin("connect to proxy 127.0.0.1:1", resp['err'][1].get('mesg'))
|
|
673
673
|
|
|
674
674
|
# test $lib.axon proxy API
|
|
675
675
|
asvisi = {'user': visi.iden}
|
|
@@ -748,13 +748,13 @@ class StormHttpTest(s_test.SynTest):
|
|
|
748
748
|
opts = {'vars': {'proxy': 'socks5://user:pass@127.0.0.1:1'}, 'user': visi.iden}
|
|
749
749
|
|
|
750
750
|
resp = await core.callStorm(q1, opts=opts)
|
|
751
|
-
self.
|
|
751
|
+
self.isin("connect to proxy 127.0.0.1:1", resp['err'][1].get('mesg'))
|
|
752
752
|
|
|
753
753
|
resp = await core.callStorm(q2, opts=opts)
|
|
754
|
-
self.
|
|
754
|
+
self.isin("connect to proxy 127.0.0.1:1", resp['err'][1].get('mesg'))
|
|
755
755
|
|
|
756
756
|
resp = await core.callStorm(q3, opts=opts)
|
|
757
|
-
self.
|
|
757
|
+
self.isin("connect to proxy 127.0.0.1:1", resp['err'][1].get('mesg'))
|
|
758
758
|
|
|
759
759
|
opts = {'vars': {'proxy': False}, 'user': visi.iden}
|
|
760
760
|
|
|
@@ -46,11 +46,13 @@ class JsonTest(s_test.SynTest):
|
|
|
46
46
|
q = '''$schemaObj = $lib.json.schema($schema)
|
|
47
47
|
$item=({})
|
|
48
48
|
$item."key:integer"=(4)
|
|
49
|
+
$item."key:multi"=(4)
|
|
49
50
|
return ( $schemaObj.validate($item) )
|
|
50
51
|
'''
|
|
51
52
|
isok, valu = await core.callStorm(q, opts=opts)
|
|
52
53
|
self.true(isok)
|
|
53
54
|
self.eq(4, valu.get('key:integer'))
|
|
55
|
+
self.eq(4, valu.get('key:multi'))
|
|
54
56
|
self.eq('Default string!', valu.get('key:string'))
|
|
55
57
|
|
|
56
58
|
q = '''$schemaObj = $lib.json.schema($schema)
|
|
@@ -68,12 +70,13 @@ class JsonTest(s_test.SynTest):
|
|
|
68
70
|
|
|
69
71
|
q = '''
|
|
70
72
|
$schemaObj = $lib.json.schema($schema, use_default=$lib.false)
|
|
71
|
-
$item = ({"key:integer": 4})
|
|
73
|
+
$item = ({"key:integer": 4, "key:multi": "4"})
|
|
72
74
|
return($schemaObj.validate($item))
|
|
73
75
|
'''
|
|
74
76
|
isok, valu = await core.callStorm(q, opts={'vars': {'schema': s_test.test_schema}})
|
|
75
77
|
self.true(isok)
|
|
76
78
|
self.eq(4, valu.get('key:integer'))
|
|
79
|
+
self.eq('4', valu.get('key:multi'))
|
|
77
80
|
self.notin('key:string', valu)
|
|
78
81
|
|
|
79
82
|
# Print a json schema obj
|
|
@@ -1291,35 +1291,33 @@ class StormTypesTest(s_test.SynTest):
|
|
|
1291
1291
|
self.len(1, nodes)
|
|
1292
1292
|
self.eq('visi@vertex.link', nodes[0].ndef[1])
|
|
1293
1293
|
|
|
1294
|
-
|
|
1295
|
-
self.eq(1, nodes[0].ndef[1])
|
|
1294
|
+
self.true(await core.callStorm('$s = woot return($s.startswith(w))'))
|
|
1296
1295
|
|
|
1297
|
-
|
|
1298
|
-
self.eq(0, nodes[0].ndef[1])
|
|
1296
|
+
self.false(await core.callStorm('$s = woot return($s.endswith(visi))'))
|
|
1299
1297
|
|
|
1300
|
-
|
|
1301
|
-
self.eq(' woot',
|
|
1298
|
+
valu = await core.callStorm('$s = woot return($s.rjust(10))')
|
|
1299
|
+
self.eq(' woot', valu)
|
|
1302
1300
|
|
|
1303
|
-
|
|
1304
|
-
self.eq('xxxxxxwoot',
|
|
1301
|
+
valu = await core.callStorm('$s = woot return($s.rjust(10, x))')
|
|
1302
|
+
self.eq('xxxxxxwoot', valu)
|
|
1305
1303
|
|
|
1306
|
-
|
|
1307
|
-
self.eq('woot ',
|
|
1304
|
+
valu = await core.callStorm('$s = woot return($s.ljust(10))')
|
|
1305
|
+
self.eq('woot ', valu)
|
|
1308
1306
|
|
|
1309
|
-
|
|
1310
|
-
self.eq('wootxxxxxx',
|
|
1307
|
+
valu = await core.callStorm('$s = woot return($s.ljust(10, x))')
|
|
1308
|
+
self.eq('wootxxxxxx', valu)
|
|
1311
1309
|
|
|
1312
1310
|
sobj = s_stormtypes.Str('beepbeep')
|
|
1313
1311
|
self.len(8, sobj)
|
|
1314
1312
|
|
|
1315
|
-
|
|
1316
|
-
self.eq('foo.bar.baz',
|
|
1313
|
+
valu = await core.callStorm('$s = (foo, bar, baz) return((".").join($s))')
|
|
1314
|
+
self.eq('foo.bar.baz', valu)
|
|
1317
1315
|
|
|
1318
|
-
|
|
1319
|
-
self.eq('foo.bar.baz',
|
|
1316
|
+
valu = await core.callStorm('$s = foo-bar-baz return($s.replace("-", "."))')
|
|
1317
|
+
self.eq('foo.bar.baz', valu)
|
|
1320
1318
|
|
|
1321
|
-
|
|
1322
|
-
self.eq('foo.bar-baz',
|
|
1319
|
+
valu = await core.callStorm('$s = foo-bar-baz return($s.replace("-", ".", 1))')
|
|
1320
|
+
self.eq('foo.bar-baz', valu)
|
|
1323
1321
|
|
|
1324
1322
|
q = '$foo=" foo " return ( $foo.strip() )'
|
|
1325
1323
|
self.eq('foo', await core.callStorm(q))
|
synapse/tests/test_lib_view.py
CHANGED
|
@@ -332,6 +332,20 @@ class ViewTest(s_t_utils.SynTest):
|
|
|
332
332
|
self.len(100, nodeedit[0][2])
|
|
333
333
|
self.len(2, nodeedit[1][2])
|
|
334
334
|
|
|
335
|
+
await core.nodes('[ test:str=lowertag +#a.b=2020]')
|
|
336
|
+
|
|
337
|
+
vdef2 = await core.view.fork()
|
|
338
|
+
opts = {'view': vdef2['iden']}
|
|
339
|
+
await core.nodes('test:str=lowertag [ +#a.b.c ]', opts=opts)
|
|
340
|
+
|
|
341
|
+
retn = await core.callStorm('test:str=lowertag return($node.getStorNodes())', opts=opts)
|
|
342
|
+
|
|
343
|
+
# Only leaf tag is added in our top layer
|
|
344
|
+
self.isin('a.b.c', retn[0].get('tags'))
|
|
345
|
+
self.notin('a.b', retn[0].get('tags'))
|
|
346
|
+
|
|
347
|
+
self.isin('a.b', retn[1].get('tags'))
|
|
348
|
+
|
|
335
349
|
async def test_view_merge_ival(self):
|
|
336
350
|
|
|
337
351
|
async with self.getTestCore() as core:
|
synapse/tests/test_model_inet.py
CHANGED
|
@@ -2908,10 +2908,10 @@ class InetModelTest(s_t_utils.SynTest):
|
|
|
2908
2908
|
:flow=*
|
|
2909
2909
|
:server=$server
|
|
2910
2910
|
:server:cert=*
|
|
2911
|
-
:server:
|
|
2911
|
+
:server:ja3s=$ja3s
|
|
2912
2912
|
:client=$client
|
|
2913
2913
|
:client:cert=*
|
|
2914
|
-
:client:
|
|
2914
|
+
:client:ja3=$ja3
|
|
2915
2915
|
]
|
|
2916
2916
|
''', opts={'vars': props})
|
|
2917
2917
|
self.len(1, nodes)
|
|
@@ -2920,8 +2920,8 @@ class InetModelTest(s_t_utils.SynTest):
|
|
|
2920
2920
|
self.nn(nodes[0].get('server:cert'))
|
|
2921
2921
|
self.nn(nodes[0].get('client:cert'))
|
|
2922
2922
|
|
|
2923
|
-
self.eq(props['ja3'], nodes[0].get('client:
|
|
2924
|
-
self.eq(props['ja3s'], nodes[0].get('server:
|
|
2923
|
+
self.eq(props['ja3'], nodes[0].get('client:ja3'))
|
|
2924
|
+
self.eq(props['ja3s'], nodes[0].get('server:ja3s'))
|
|
2925
2925
|
|
|
2926
2926
|
self.eq(props['client'], nodes[0].get('client'))
|
|
2927
2927
|
self.eq(props['server'], nodes[0].get('server'))
|
|
@@ -2971,7 +2971,9 @@ class InetModelTest(s_t_utils.SynTest):
|
|
|
2971
2971
|
q = '''
|
|
2972
2972
|
[ inet:service:platform=(slack,)
|
|
2973
2973
|
:url="https://slack.com"
|
|
2974
|
+
:urls=(https://slacker.com,)
|
|
2974
2975
|
:name=Slack
|
|
2976
|
+
:names=("slack chat",)
|
|
2975
2977
|
:provider={ ou:org:name=$provname }
|
|
2976
2978
|
:provider:name=$provname
|
|
2977
2979
|
]
|
|
@@ -2980,11 +2982,19 @@ class InetModelTest(s_t_utils.SynTest):
|
|
|
2980
2982
|
self.len(1, nodes)
|
|
2981
2983
|
self.eq(nodes[0].ndef, ('inet:service:platform', s_common.guid(('slack',))))
|
|
2982
2984
|
self.eq(nodes[0].get('url'), 'https://slack.com')
|
|
2985
|
+
self.eq(nodes[0].get('urls'), ('https://slacker.com',))
|
|
2983
2986
|
self.eq(nodes[0].get('name'), 'slack')
|
|
2987
|
+
self.eq(nodes[0].get('names'), ('slack chat',))
|
|
2984
2988
|
self.eq(nodes[0].get('provider'), provider.ndef[1])
|
|
2985
2989
|
self.eq(nodes[0].get('provider:name'), provname.lower())
|
|
2986
2990
|
platform = nodes[0]
|
|
2987
2991
|
|
|
2992
|
+
nodes = await core.nodes('[ inet:service:platform=({"name": "slack chat"}) ]')
|
|
2993
|
+
self.eq(nodes[0].ndef, platform.ndef)
|
|
2994
|
+
|
|
2995
|
+
nodes = await core.nodes('[ inet:service:platform=({"url": "https://slacker.com"}) ]')
|
|
2996
|
+
self.eq(nodes[0].ndef, platform.ndef)
|
|
2997
|
+
|
|
2988
2998
|
q = '''
|
|
2989
2999
|
[ inet:service:instance=(vertex, slack)
|
|
2990
3000
|
:id='T2XK1223Y'
|
|
@@ -3383,12 +3393,15 @@ class InetModelTest(s_t_utils.SynTest):
|
|
|
3383
3393
|
|
|
3384
3394
|
q = '''
|
|
3385
3395
|
[ inet:service:access=(api, blackout, 1715856900000, vertex, slack)
|
|
3396
|
+
:action=foo.bar
|
|
3386
3397
|
:account=$blckiden
|
|
3387
3398
|
:instance=$instiden
|
|
3388
3399
|
:platform=$platiden
|
|
3389
3400
|
:resource=$rsrciden
|
|
3390
3401
|
:success=$lib.true
|
|
3391
3402
|
:time=(1715856900000)
|
|
3403
|
+
:app={[ inet:service:app=({"name": "slack web"}) ]}
|
|
3404
|
+
:client:app={[ inet:service:app=({"name": "slack web"}) :desc="The slack web application"]}
|
|
3392
3405
|
]
|
|
3393
3406
|
'''
|
|
3394
3407
|
opts = {'vars': {
|
|
@@ -3400,12 +3413,14 @@ class InetModelTest(s_t_utils.SynTest):
|
|
|
3400
3413
|
}}
|
|
3401
3414
|
nodes = await core.nodes(q, opts=opts)
|
|
3402
3415
|
self.len(1, nodes)
|
|
3416
|
+
self.eq(nodes[0].get('action'), 'foo.bar.')
|
|
3403
3417
|
self.eq(nodes[0].get('account'), blckacct.ndef[1])
|
|
3404
3418
|
self.eq(nodes[0].get('instance'), platinst.ndef[1])
|
|
3405
3419
|
self.eq(nodes[0].get('platform'), platform.ndef[1])
|
|
3406
3420
|
self.eq(nodes[0].get('resource'), resource.ndef[1])
|
|
3407
3421
|
self.true(nodes[0].get('success'))
|
|
3408
3422
|
self.eq(nodes[0].get('time'), 1715856900000)
|
|
3423
|
+
self.eq(nodes[0].get('app'), nodes[0].get('client:app'))
|
|
3409
3424
|
|
|
3410
3425
|
q = '''
|
|
3411
3426
|
[ inet:service:message=(visi, says, relax)
|
|
@@ -3483,3 +3498,41 @@ class InetModelTest(s_t_utils.SynTest):
|
|
|
3483
3498
|
self.len(1, await core.nodes('inet:service:subscription -> inet:service:subscription:level:taxonomy'))
|
|
3484
3499
|
self.len(1, await core.nodes('inet:service:subscription :pay:instrument -> econ:bank:account'))
|
|
3485
3500
|
self.len(1, await core.nodes('inet:service:subscription :subscriber -> inet:service:tenant'))
|
|
3501
|
+
|
|
3502
|
+
async def test_model_inet_tls_ja4(self):
|
|
3503
|
+
|
|
3504
|
+
async with self.getTestCore() as core:
|
|
3505
|
+
|
|
3506
|
+
nodes = await core.nodes('[ inet:tls:ja4:sample=(1.2.3.4, t13d190900_9dc949149365_97f8aa674fd9) ]')
|
|
3507
|
+
self.len(1, nodes)
|
|
3508
|
+
self.eq(nodes[0].get('ja4'), 't13d190900_9dc949149365_97f8aa674fd9')
|
|
3509
|
+
self.eq(nodes[0].get('client'), 'tcp://1.2.3.4')
|
|
3510
|
+
self.len(1, await core.nodes('inet:tls:ja4:sample -> inet:client'))
|
|
3511
|
+
self.len(1, await core.nodes('inet:tls:ja4:sample -> inet:tls:ja4'))
|
|
3512
|
+
|
|
3513
|
+
nodes = await core.nodes('[ inet:tls:ja4s:sample=(1.2.3.4:443, t130200_1301_a56c5b993250) ]')
|
|
3514
|
+
self.len(1, nodes)
|
|
3515
|
+
self.eq(nodes[0].get('ja4s'), 't130200_1301_a56c5b993250')
|
|
3516
|
+
self.eq(nodes[0].get('server'), 'tcp://1.2.3.4:443')
|
|
3517
|
+
self.len(1, await core.nodes('inet:tls:ja4s:sample -> inet:server'))
|
|
3518
|
+
self.len(1, await core.nodes('inet:tls:ja4s:sample -> inet:tls:ja4s'))
|
|
3519
|
+
|
|
3520
|
+
nodes = await core.nodes('''[
|
|
3521
|
+
inet:tls:handshake=*
|
|
3522
|
+
:client:ja4=t13d190900_9dc949149365_97f8aa674fd9
|
|
3523
|
+
:server:ja4s=t130200_1301_a56c5b993250
|
|
3524
|
+
]''')
|
|
3525
|
+
self.len(1, nodes)
|
|
3526
|
+
self.eq(nodes[0].get('client:ja4'), 't13d190900_9dc949149365_97f8aa674fd9')
|
|
3527
|
+
self.eq(nodes[0].get('server:ja4s'), 't130200_1301_a56c5b993250')
|
|
3528
|
+
self.len(1, await core.nodes('inet:tls:handshake :client:ja4 -> inet:tls:ja4'))
|
|
3529
|
+
self.len(1, await core.nodes('inet:tls:handshake :server:ja4s -> inet:tls:ja4s'))
|
|
3530
|
+
|
|
3531
|
+
ja4_t = core.model.type('inet:tls:ja4')
|
|
3532
|
+
ja4s_t = core.model.type('inet:tls:ja4s')
|
|
3533
|
+
self.eq('t13d1909Tg_9dc949149365_97f8aa674fd9', ja4_t.norm(' t13d1909Tg_9dc949149365_97f8aa674fd9 ')[0])
|
|
3534
|
+
self.eq('t1302Tg_1301_a56c5b993250', ja4s_t.norm(' t1302Tg_1301_a56c5b993250 ')[0])
|
|
3535
|
+
with self.raises(s_exc.BadTypeValu):
|
|
3536
|
+
ja4_t.norm('t13d190900_9dc949149365_97f8aa674fD9')
|
|
3537
|
+
with self.raises(s_exc.BadTypeValu):
|
|
3538
|
+
ja4s_t.norm('t130200_1301_a56c5B993250')
|
synapse/tests/test_model_orgs.py
CHANGED
|
@@ -455,8 +455,24 @@ class OuModelTest(s_t_utils.SynTest):
|
|
|
455
455
|
'place': place0,
|
|
456
456
|
'url': 'http://arrowcon.org/2018/dinner',
|
|
457
457
|
}
|
|
458
|
-
q = '''
|
|
459
|
-
|
|
458
|
+
q = '''
|
|
459
|
+
[ ou:conference:event=$valu
|
|
460
|
+
:name=$p.name
|
|
461
|
+
:desc=$p.desc
|
|
462
|
+
:start=$p.start
|
|
463
|
+
:end=$p.end
|
|
464
|
+
:conference=$p.conference
|
|
465
|
+
:contact=$p.contact
|
|
466
|
+
:place=$p.place
|
|
467
|
+
:url=$p.url
|
|
468
|
+
]
|
|
469
|
+
|
|
470
|
+
// :conference should not be RO
|
|
471
|
+
[ -:conference ]
|
|
472
|
+
|
|
473
|
+
// Put the value back
|
|
474
|
+
[ :conference=$p.conference ]
|
|
475
|
+
'''
|
|
460
476
|
nodes = await core.nodes(q, opts={'vars': {'valu': c0, 'p': props}})
|
|
461
477
|
self.len(1, nodes)
|
|
462
478
|
node = nodes[0]
|
|
@@ -3,6 +3,9 @@ import stat
|
|
|
3
3
|
|
|
4
4
|
import synapse.exc as s_exc
|
|
5
5
|
import synapse.common as s_common
|
|
6
|
+
|
|
7
|
+
import synapse.lib.version as s_version
|
|
8
|
+
|
|
6
9
|
import synapse.tests.utils as s_test
|
|
7
10
|
import synapse.tests.files as s_files
|
|
8
11
|
|
|
@@ -159,6 +162,12 @@ class GenPkgTest(s_test.SynTest):
|
|
|
159
162
|
wflow = pdef['optic']['workflows']['testpkg-baz']
|
|
160
163
|
self.eq(wflow, {'name': 'real-baz', 'desc': 'this is the real baz desc'})
|
|
161
164
|
|
|
165
|
+
build = pdef.get('build')
|
|
166
|
+
self.nn(build)
|
|
167
|
+
self.nn(build.get('time'))
|
|
168
|
+
self.eq(build.get('synapse:version'), s_version.verstring)
|
|
169
|
+
self.eq(build.get('synapse:commit'), s_version.commit)
|
|
170
|
+
|
|
162
171
|
# nodocs
|
|
163
172
|
nodocspath = s_common.genpath(core.dirn, 'testpkg_nodocs.json')
|
|
164
173
|
argv = ('--no-docs', '--save', nodocspath, ymlpath)
|
synapse/tests/utils.py
CHANGED
synapse/tools/autodoc.py
CHANGED
|
@@ -12,6 +12,7 @@ import synapse.common as s_common
|
|
|
12
12
|
import synapse.cortex as s_cortex
|
|
13
13
|
import synapse.telepath as s_telepath
|
|
14
14
|
|
|
15
|
+
import synapse.lib.coro as s_coro
|
|
15
16
|
import synapse.lib.json as s_json
|
|
16
17
|
import synapse.lib.storm as s_storm
|
|
17
18
|
import synapse.lib.config as s_config
|
|
@@ -1041,6 +1042,11 @@ def makeargparser():
|
|
|
1041
1042
|
|
|
1042
1043
|
return pars
|
|
1043
1044
|
|
|
1044
|
-
|
|
1045
|
+
async def _main(argv, outp=None): # pragma: no cover
|
|
1045
1046
|
s_common.setlogging(logger, 'DEBUG')
|
|
1046
|
-
|
|
1047
|
+
ret = await main(argv, outp=outp)
|
|
1048
|
+
await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
|
|
1049
|
+
return ret
|
|
1050
|
+
|
|
1051
|
+
if __name__ == '__main__': # pragma: no cover
|
|
1052
|
+
asyncio.run(_main(sys.argv[1:]))
|
synapse/tools/genpkg.py
CHANGED
|
@@ -18,6 +18,7 @@ import synapse.lib.output as s_output
|
|
|
18
18
|
import synapse.lib.certdir as s_certdir
|
|
19
19
|
import synapse.lib.dyndeps as s_dyndeps
|
|
20
20
|
import synapse.lib.schemas as s_schemas
|
|
21
|
+
import synapse.lib.version as s_version
|
|
21
22
|
|
|
22
23
|
logger = logging.getLogger(__name__)
|
|
23
24
|
|
|
@@ -122,6 +123,12 @@ def loadPkgProto(path, opticdir=None, no_docs=False, readonly=False):
|
|
|
122
123
|
|
|
123
124
|
genopts = pkgdef.pop('genopts', {})
|
|
124
125
|
|
|
126
|
+
# Stamp build info into the pkgdef if it doesn't already exist
|
|
127
|
+
pkgdef.setdefault('build', {})
|
|
128
|
+
pkgdef['build'].setdefault('time', s_common.now())
|
|
129
|
+
pkgdef['build'].setdefault('synapse:version', s_version.verstring)
|
|
130
|
+
pkgdef['build'].setdefault('synapse:commit', s_version.commit)
|
|
131
|
+
|
|
125
132
|
logodef = pkgdef.get('logo')
|
|
126
133
|
if logodef is not None:
|
|
127
134
|
|
|
@@ -265,8 +272,6 @@ async def main(argv, outp=s_output.stdout):
|
|
|
265
272
|
else:
|
|
266
273
|
pkgdef = loadPkgProto(opts.pkgfile, opticdir=opts.optic, no_docs=opts.no_docs)
|
|
267
274
|
|
|
268
|
-
pkgdef['build'] = {'time': s_common.now()}
|
|
269
|
-
|
|
270
275
|
if opts.signas is not None:
|
|
271
276
|
|
|
272
277
|
s_certdir.addCertPath(opts.certdir)
|
|
@@ -283,6 +288,8 @@ async def main(argv, outp=s_output.stdout):
|
|
|
283
288
|
'sign': sign,
|
|
284
289
|
}
|
|
285
290
|
|
|
291
|
+
s_schemas.reqValidPkgdef(pkgdef)
|
|
292
|
+
|
|
286
293
|
if not opts.save and not opts.push:
|
|
287
294
|
outp.printf('Neither --push nor --save provided. Nothing to do.')
|
|
288
295
|
return 1
|
synapse/tools/rstorm.py
CHANGED
|
@@ -5,6 +5,7 @@ import argparse
|
|
|
5
5
|
|
|
6
6
|
import synapse.common as s_common
|
|
7
7
|
|
|
8
|
+
import synapse.lib.coro as s_coro
|
|
8
9
|
import synapse.lib.output as s_output
|
|
9
10
|
import synapse.lib.rstorm as s_rstorm
|
|
10
11
|
|
|
@@ -32,6 +33,11 @@ async def main(argv, outp=s_output.stdout):
|
|
|
32
33
|
for line in lines:
|
|
33
34
|
outp.printf(line, addnl=False)
|
|
34
35
|
|
|
35
|
-
|
|
36
|
+
async def _main(argv, outp=s_output.stdout): # pragma: no cover
|
|
36
37
|
s_common.setlogging(logger)
|
|
37
|
-
|
|
38
|
+
ret = await main(argv, outp=outp)
|
|
39
|
+
await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
|
|
40
|
+
return ret
|
|
41
|
+
|
|
42
|
+
if __name__ == '__main__':
|
|
43
|
+
sys.exit(asyncio.run(_main(sys.argv[1:])))
|
|
@@ -89,7 +89,7 @@ synapse/lib/aha.py,sha256=ll03EXHmOV4ZmG_KmkgdmU6uaMnFR9uhiDvQJj_79T4,56234
|
|
|
89
89
|
synapse/lib/ast.py,sha256=fLVJwGFTtRUZWdKcxzd2PPCErDHfzt47aLT1wALwUSI,166296
|
|
90
90
|
synapse/lib/auth.py,sha256=B7-Ji3MzPlW6pvRNtb0ciJKDru54QC-_yvznGraZCJs,54400
|
|
91
91
|
synapse/lib/autodoc.py,sha256=tM2OCPrV7yeth8Cx-wx-_VXBmBfzJS52vaubg_7BqCI,23217
|
|
92
|
-
synapse/lib/base.py,sha256=
|
|
92
|
+
synapse/lib/base.py,sha256=yJVfv7SiZhnzAP9LWKHlFOsY_l6ztUDNtt2TDT22U4Q,23422
|
|
93
93
|
synapse/lib/boss.py,sha256=UvYIbUS32B70rK-5pPOeCKEKg2cR8ymedhuTYo_31Ik,2248
|
|
94
94
|
synapse/lib/cache.py,sha256=N8BoNFQXOaYQU33LLYQcVkdV6IYjSNaUoaKue55y7H0,6275
|
|
95
95
|
synapse/lib/cell.py,sha256=no45zKA9hZIzoElYg298pUxcOY6kCEoR_Prq9wuq9TI,184737
|
|
@@ -125,7 +125,7 @@ synapse/lib/modules.py,sha256=xHNrGBWLOSTSqn7GMMnm6iiw3Df-Q11h5gOUw84Ax7E,1282
|
|
|
125
125
|
synapse/lib/msgpack.py,sha256=IEYF1sv0UoYq1BpqfZUzf30bAlWveC6ZArXBeY68vuI,7895
|
|
126
126
|
synapse/lib/multislabseqn.py,sha256=cxNN1UdQPD3TDvGnNJcITkssAk5Y3pBsbd89sVd8qJw,15221
|
|
127
127
|
synapse/lib/nexus.py,sha256=CrdOco9bcAzV1-93h1DlvZeqLP_kCIJvZRvb1Rwxgfk,23687
|
|
128
|
-
synapse/lib/node.py,sha256=
|
|
128
|
+
synapse/lib/node.py,sha256=XwcgKbouFHMt79Hmju3vo6xd3jTrLu5Ai5zFqpU_HuA,31474
|
|
129
129
|
synapse/lib/oauth.py,sha256=xgJNXyt4uWymt5xaoXpCAeZmrSiJV7XVwl9h3Pm92zg,20367
|
|
130
130
|
synapse/lib/output.py,sha256=MARscREHja4h8PQN7GZxHGvF36RoOkUyw3vfhmFzMTk,890
|
|
131
131
|
synapse/lib/parser.py,sha256=Tjk1aYa5ucQLzGGUf14dmNFpxfLiKu00ZWj8SgAf324,29471
|
|
@@ -133,13 +133,13 @@ synapse/lib/queue.py,sha256=omMtqD4HWg2mLOhhtIe4pA_evz234lJ9uhlAhC_xbW4,3879
|
|
|
133
133
|
synapse/lib/ratelimit.py,sha256=BIeFPZb9Bk5GFIVvhM43Uw1s0abY6z7NgTuBorVajz4,1124
|
|
134
134
|
synapse/lib/reflect.py,sha256=j7Y522UzAwNswUehyfi9kHFNkTxuHXsFuEKY4ATXWTQ,2783
|
|
135
135
|
synapse/lib/rstorm.py,sha256=z5RdqNI0EkjWuU1oWbGXZrgxcBF32mFJGPA-_sdd6EM,19895
|
|
136
|
-
synapse/lib/schemas.py,sha256=
|
|
136
|
+
synapse/lib/schemas.py,sha256=gmjiPlA-7jHudG1Dq-TROh18NDxRjdu4-oCCdBUtDn8,41106
|
|
137
137
|
synapse/lib/scope.py,sha256=0CuSXLG_7pNleC1BcJ8_WbA50DswrX4DNjW5MyGGGNo,5496
|
|
138
138
|
synapse/lib/scrape.py,sha256=-TLjUrerHCGiuCOeuGOGA6IpQdaFGW6LvwZtp1xOCnw,23785
|
|
139
|
-
synapse/lib/share.py,sha256=
|
|
139
|
+
synapse/lib/share.py,sha256=wE0WE77QxJTbfcZmVLn_9hHbXMsptj6e2I4KbTho9_Q,605
|
|
140
140
|
synapse/lib/slaboffs.py,sha256=Fd0RrIRBMjh159aQz5y1ONmzw0NvV040kVX_jZjQW6I,815
|
|
141
141
|
synapse/lib/slabseqn.py,sha256=LJ2SZEsZlROBAD3mdS-3JxNVVPXXkBW8GIJXsW0OGG8,10287
|
|
142
|
-
synapse/lib/snap.py,sha256=
|
|
142
|
+
synapse/lib/snap.py,sha256=NbFCkISq_UZPjdRUzxAG_You0_rLP9_USAgYi3wAE44,63709
|
|
143
143
|
synapse/lib/spooled.py,sha256=BQHIW-qZvEcvhEf8PpXhbDDGzq1go4TH63D6kn-1anM,6021
|
|
144
144
|
synapse/lib/storm.lark,sha256=8RxsM4xYhBpJbGpS2Yfft74eQyvFvD0FbSbaSkLcL20,27412
|
|
145
145
|
synapse/lib/storm.py,sha256=zda0wgsophZ52T9hgLbiORJHcZHiS2nU3opGoeL5F88,205526
|
|
@@ -147,7 +147,7 @@ synapse/lib/storm_format.py,sha256=9cE8WNPYTcqgRakIqkmIQzOr16Hqbj_sM1QabHug3i0,4
|
|
|
147
147
|
synapse/lib/stormctrl.py,sha256=3UC2LOHClC17JwYNuo8NeyntuAvIXphjenXEzVP33mY,2523
|
|
148
148
|
synapse/lib/stormhttp.py,sha256=3BdaZM6wC3iuYc4ryxtroyTdGhGhei40EoKiH4qSwIE,28877
|
|
149
149
|
synapse/lib/stormsvc.py,sha256=FURIsQUVNJmY8Z5TmhTF1O__DGXPiVg5pUiOoPM8r3g,7573
|
|
150
|
-
synapse/lib/stormtypes.py,sha256=
|
|
150
|
+
synapse/lib/stormtypes.py,sha256=R_kRMtJda1h0IPzMN7Rit9mP8Kk62jm1zx4I2ngxHPA,402228
|
|
151
151
|
synapse/lib/stormwhois.py,sha256=w7N2oCyMljNvi_sRt_bZb5BJwWwYkVGcRd7H_0oHY8Q,2554
|
|
152
152
|
synapse/lib/structlog.py,sha256=v5MK5jtJIRSF-E4y4fQuzEVKmbocu8ByFLDTY8Ybjpk,1336
|
|
153
153
|
synapse/lib/task.py,sha256=82by24W-g_PhijFBN97AtvMLHMwlJIsP37fDS2f572Y,6235
|
|
@@ -158,7 +158,7 @@ synapse/lib/time.py,sha256=bk_1F6_MDuCWJ1ToPJ-XHkeTWVw5b4SE7cCixBqVxXo,9435
|
|
|
158
158
|
synapse/lib/trigger.py,sha256=mnfkoBHB88JfqPoxb5oflvAaBKZpNvYdxP247YS53fE,20697
|
|
159
159
|
synapse/lib/types.py,sha256=plPuYWNaJmCWjYIOWIkDhh8NhTONATZD6d85qf2NUfM,69740
|
|
160
160
|
synapse/lib/urlhelp.py,sha256=ljhnF91z9ihyOLdZZ6OoQYCN1WYjOj1imukD45xiKU0,3320
|
|
161
|
-
synapse/lib/version.py,sha256=
|
|
161
|
+
synapse/lib/version.py,sha256=2X2VgCdTdapLJHREDFMzUWioAzaYw_MTPVwCZRgAbMM,7162
|
|
162
162
|
synapse/lib/view.py,sha256=lidWNualB8Imtz1x6aWo70bntdv9Sf9tpG78cliDKjI,62682
|
|
163
163
|
synapse/lib/crypto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
164
164
|
synapse/lib/crypto/coin.py,sha256=_dhlkzIrHT8BvHdJOWK7PDThz3sK3dDRnWAUqjRpZJc,4910
|
|
@@ -194,7 +194,7 @@ synapse/lib/stormlib/index.py,sha256=f92Yn3nhojFhxbp7SUu9T-lRTGw-_miazfwMqG7QO14
|
|
|
194
194
|
synapse/lib/stormlib/infosec.py,sha256=sV3kKfQuu832--rXUSENXA3n6TrfhynxUZE-WlZQCVM,30377
|
|
195
195
|
synapse/lib/stormlib/ipv6.py,sha256=Ik50Hpd6T-XCc7gVzJqmYqGQF8jfIwFIQvNCDPCMtLs,1557
|
|
196
196
|
synapse/lib/stormlib/iters.py,sha256=TnceDb1bTCpDT2RgaFJ3rpXETZp2GyPzlId6iyah0Os,3159
|
|
197
|
-
synapse/lib/stormlib/json.py,sha256=
|
|
197
|
+
synapse/lib/stormlib/json.py,sha256=QR9ytaGbAnKv7qsxnXa3v3yO5cI-jZi1uuwLmcjyG6g,5999
|
|
198
198
|
synapse/lib/stormlib/log.py,sha256=wdV-lqzQMM0C3GXNJKJKvkSKjk0CBsUfjd-Cl06LOtE,7034
|
|
199
199
|
synapse/lib/stormlib/macro.py,sha256=7iQ18mCaNZcslmfXGQvOmGQ71HxD7JeDp0HDmu5-EKM,8807
|
|
200
200
|
synapse/lib/stormlib/math.py,sha256=3RKHj40GkYFiJSINa2AZZOAA-GqqeEP98bWw2JNity8,1149
|
|
@@ -239,13 +239,13 @@ synapse/models/entity.py,sha256=loHKByGwv2xyz6cYWWUpwk12mxWNzC06BKgDgWfX6ek,1617
|
|
|
239
239
|
synapse/models/files.py,sha256=4nA0LGK2gKEjErzTnFfIX7kxNn8c_C7xWAfiwWFz5zY,34396
|
|
240
240
|
synapse/models/geopol.py,sha256=1DGxLJ60QlnSIe3WxxViYQ3KFSwm89vvGc534bbSNBo,11304
|
|
241
241
|
synapse/models/geospace.py,sha256=Ix54xGdGRZNqLI0r6r9OA1t6vqB3XM1lkoy86Vjt5XA,21155
|
|
242
|
-
synapse/models/inet.py,sha256=
|
|
242
|
+
synapse/models/inet.py,sha256=FadF1-21JUjOJfPXJluTzYHNnJgQdKitTFbKDMzOrrs,180518
|
|
243
243
|
synapse/models/infotech.py,sha256=Hrv51zXxXGRLiitgbByM7BK_Y_mX18uL5mizZXn2lZA,153163
|
|
244
244
|
synapse/models/language.py,sha256=hBVVIf5kc_FSIV7HZhWnberoc9ssxuqeff4fqC9iz4o,3640
|
|
245
245
|
synapse/models/material.py,sha256=UvmnBEkbhBbdbnvWtTlgGJAJlKDrx9E-YSQ3K49ws5M,5405
|
|
246
246
|
synapse/models/math.py,sha256=5zDLSwGbOcWI6T5-KspPL20sR8Bcs59pnRK2nEELzss,1775
|
|
247
247
|
synapse/models/media.py,sha256=wdXNzLrHb4YYRZ3NlGombNwZsphwfH20oZQQ9ICq7ZQ,3604
|
|
248
|
-
synapse/models/orgs.py,sha256=
|
|
248
|
+
synapse/models/orgs.py,sha256=0q7TDvDIDUvPzu-a2ZX1w7G6vUMLgbR2_-0MKIJfU6k,71490
|
|
249
249
|
synapse/models/person.py,sha256=HiZy_zT0Q1AoeXbpogEJWuJe436bOo_Ai4kkmA9c2ZU,28568
|
|
250
250
|
synapse/models/planning.py,sha256=vmrY4d3WRxizrNU1YBe36NGZTuuu4lhGS8KI5lCZ5yQ,7302
|
|
251
251
|
synapse/models/proj.py,sha256=vl-2uZouiWSey8t4lTNA4BxUKhX94rqm3SuLrodQUP8,9904
|
|
@@ -286,14 +286,14 @@ synapse/tests/test_lib_aha.py,sha256=gpO-B6C-w_YtrqZlsaKsnpsDIEtAYSJZ3un25rAHTmU
|
|
|
286
286
|
synapse/tests/test_lib_ast.py,sha256=_HA-7HozurJHmSFlamEYCWt3iiqd9Zs8fzW8MxtJNd4,192475
|
|
287
287
|
synapse/tests/test_lib_auth.py,sha256=yuuOnBje8At7EN_DVEkqE_jsYirZYTIOaGa2VcKrckk,45011
|
|
288
288
|
synapse/tests/test_lib_autodoc.py,sha256=Iz-VuUhwxvQ3ojK-cemSo7CdCUAyFVJ8MfJ2KbFDcjQ,8354
|
|
289
|
-
synapse/tests/test_lib_base.py,sha256=
|
|
289
|
+
synapse/tests/test_lib_base.py,sha256=F9tq0G-KgJluob0Np3fBdByOlHxizciAoqAhrGGwe2U,14751
|
|
290
290
|
synapse/tests/test_lib_boss.py,sha256=xLmfoFFS8-dreIegA_vTJ5_c4-S9UHp48MWLH6_8P0M,1917
|
|
291
291
|
synapse/tests/test_lib_cache.py,sha256=oQgEBhm8pZFCEvMfcD3znTDQgl8Gv91fEOB-3eb2IIg,8594
|
|
292
292
|
synapse/tests/test_lib_cell.py,sha256=FbeM8WiKx-jXUZsPvESfLO1GvOZ4xGz7kGWgZlLL5pQ,157097
|
|
293
293
|
synapse/tests/test_lib_certdir.py,sha256=d5X1lvp0DnBRigXYLbofZAXakZp440-bjaMH30PlGsI,42728
|
|
294
294
|
synapse/tests/test_lib_chop.py,sha256=LkrM_pQU_KS88aVRPD4DI97qSdhxmw6EUA_jb-UJpww,6238
|
|
295
295
|
synapse/tests/test_lib_cli.py,sha256=B8qGx9KtTWp31RlCMtfFMzhJ0TzaaO9ph7RCK2jHtx4,9283
|
|
296
|
-
synapse/tests/test_lib_config.py,sha256=
|
|
296
|
+
synapse/tests/test_lib_config.py,sha256=a_c6MuFaVaMa3cIhOLzqfs39tCc0CsyRp1CeaocawGc,16691
|
|
297
297
|
synapse/tests/test_lib_const.py,sha256=qatZeo6C9WbpXPoV3dxvbLyDOnsj1U05tEJVrHGnkVc,873
|
|
298
298
|
synapse/tests/test_lib_coro.py,sha256=tQ8RiLml0hF5K_4s9DEdVSuRn-jfZMcnt6kZPhwsPTI,6132
|
|
299
299
|
synapse/tests/test_lib_crypto_coin.py,sha256=gMhkItWv4P3JVGlqEt5T35O6aHUMeSyX_vEetP73sZY,419
|
|
@@ -313,7 +313,7 @@ synapse/tests/test_lib_httpapi.py,sha256=fJcnNWMtBEOlU5be5-Zji8wgvEAZUqu1kggGhDk
|
|
|
313
313
|
synapse/tests/test_lib_interval.py,sha256=PNEU24XXEGdlW7WkiYJGbhGljwBJpAWen9yTOqlNikQ,839
|
|
314
314
|
synapse/tests/test_lib_json.py,sha256=Xno2FVQDsOeGLWLNvU76VskxvmJHtQufJpW0Cg3IMqQ,8757
|
|
315
315
|
synapse/tests/test_lib_jsonstor.py,sha256=ToLp5xdCOfqi1bWrPRxMsNewtGOd89zyX9Zn3VT5o9I,5950
|
|
316
|
-
synapse/tests/test_lib_layer.py,sha256=
|
|
316
|
+
synapse/tests/test_lib_layer.py,sha256=FPPN-5fzPya8DYtJJ8-LQzJ3tGwe_YjvaVakKTQRd1I,94545
|
|
317
317
|
synapse/tests/test_lib_link.py,sha256=NkNPvfWaO22IoVRkmPPLtrHrK2gluFp1gipr1fbSbWE,10297
|
|
318
318
|
synapse/tests/test_lib_lmdbslab.py,sha256=2R80A17AoErvrt5cW5KattFlAdQrxMXzG02o82uD5So,67693
|
|
319
319
|
synapse/tests/test_lib_modelrev.py,sha256=DK9ueo4WCUFagGFBP2xqEHvLqA9gnQLdbJTuKQmJs5k,81055
|
|
@@ -334,10 +334,10 @@ synapse/tests/test_lib_slaboffs.py,sha256=FHQ8mGZ27dGqVwGk6q2UJ4gkPRZN22eIVzS8hM
|
|
|
334
334
|
synapse/tests/test_lib_slabseqn.py,sha256=74V6jU7DRTsy_hqUFDuT4C6dPlJ6ObNnjmI9qhbbyVc,5230
|
|
335
335
|
synapse/tests/test_lib_snap.py,sha256=OviJtj9N5LhBV-56TySkWvRly7f8VH9d-VBcNFLAtmg,27805
|
|
336
336
|
synapse/tests/test_lib_spooled.py,sha256=Ki9UnzTPUtw7devwN_M0a8uwOst81fGQtGSVqSSh1u8,4002
|
|
337
|
-
synapse/tests/test_lib_storm.py,sha256=
|
|
337
|
+
synapse/tests/test_lib_storm.py,sha256=GLLbgQ7sztaykAcM5p_n9uyDZ3qad1thG5719sBBjB8,245310
|
|
338
338
|
synapse/tests/test_lib_storm_format.py,sha256=tEZgQMmKAeG8FQZE5HUjOT7bnKawVTpNaVQh_3Wa630,277
|
|
339
339
|
synapse/tests/test_lib_stormctrl.py,sha256=1vY7PGjgmz3AibgSiGcp_G4NSYl9YNifWdjPB0CDf1g,2877
|
|
340
|
-
synapse/tests/test_lib_stormhttp.py,sha256=
|
|
340
|
+
synapse/tests/test_lib_stormhttp.py,sha256=rhZ9xLTIzLm4GlJUFDieFqAcrhE0EFTDi2erGltPm0I,46056
|
|
341
341
|
synapse/tests/test_lib_stormlib_aha.py,sha256=XhBokRnanwe2vWZf0PcwyZgJE3mu-7V4xKNhFf7Go4U,17782
|
|
342
342
|
synapse/tests/test_lib_stormlib_auth.py,sha256=-y7bZwmeM8Qz-hqw115UdBT_c2m-wIUS26Oau-IJuH8,61338
|
|
343
343
|
synapse/tests/test_lib_stormlib_backup.py,sha256=3ZYE3swQ4A8aYJyVueFXzbekCdoKMC7jsHLoq0hTKGI,1644
|
|
@@ -358,7 +358,7 @@ synapse/tests/test_lib_stormlib_index.py,sha256=qz2pIJ1oZAyN3IEpIqYewiB4FVvKSfVL
|
|
|
358
358
|
synapse/tests/test_lib_stormlib_infosec.py,sha256=uDaJ5WjTsujvALShSf-RDAOP4HhuddQcXfANTyIJkp4,27375
|
|
359
359
|
synapse/tests/test_lib_stormlib_ipv6.py,sha256=sJDIM4lKayYct2qAGjRwgadmxzgegzSn8I3UxNRFF4M,877
|
|
360
360
|
synapse/tests/test_lib_stormlib_iters.py,sha256=cL4YZ1D8lsoMI1LF3_HcbdQbsEGTVk9Sv-qFVSg_G1E,4452
|
|
361
|
-
synapse/tests/test_lib_stormlib_json.py,sha256=
|
|
361
|
+
synapse/tests/test_lib_stormlib_json.py,sha256=ULqYofzDYHPfjSDVBsI3w0DGbTPf6WpaupCwLgjiUtA,3959
|
|
362
362
|
synapse/tests/test_lib_stormlib_log.py,sha256=1utRgbOcLYGE70fIBubffgTg-vFPq-Xqq6Y4I3QIw1c,2778
|
|
363
363
|
synapse/tests/test_lib_stormlib_macro.py,sha256=LJwjSXmX5BuoBsfp3uOhUODCdSpt5_F92XuV6ImswtM,18514
|
|
364
364
|
synapse/tests/test_lib_stormlib_mime.py,sha256=ozBJ70XxdrErOmycStWdh1xkBHVnM0BTPHvaP4faC0g,1510
|
|
@@ -379,7 +379,7 @@ synapse/tests/test_lib_stormlib_vault.py,sha256=pE_nDisXiyb-4Zm1hOrfsuEz3bjYwR8c
|
|
|
379
379
|
synapse/tests/test_lib_stormlib_xml.py,sha256=asF-Y1LVpLoqHRK71_LWy727XJvsTNpf8qRSK-CynMM,3659
|
|
380
380
|
synapse/tests/test_lib_stormlib_yaml.py,sha256=egTVXk8wW31V2msF__9WxP3THcqfysG1mYhc7hQG8rw,1358
|
|
381
381
|
synapse/tests/test_lib_stormsvc.py,sha256=zeaC4De4_osl5uA2OgEp5M2CIQlW8d6PogMzFqEhfqg,43970
|
|
382
|
-
synapse/tests/test_lib_stormtypes.py,sha256=
|
|
382
|
+
synapse/tests/test_lib_stormtypes.py,sha256=YnrqZaAjxQmaeIfmZ7qFT-Yf05Uv88VDvTQ5pNz5g-c,321644
|
|
383
383
|
synapse/tests/test_lib_stormwhois.py,sha256=AWMUYEgZ5yqvDfPC_rM4evmhgfOA_Fv5aoTjmKmN1_0,4818
|
|
384
384
|
synapse/tests/test_lib_structlog.py,sha256=BxglFqOsJFPE2RsZ8dQyTBCEe1frQrHWWXmUBO2fPJs,3898
|
|
385
385
|
synapse/tests/test_lib_task.py,sha256=UQi14LdQ0rxDRCSy4TAxyq2OXDOXPQqnvp-nCK_aoBE,2454
|
|
@@ -389,7 +389,7 @@ synapse/tests/test_lib_trigger.py,sha256=IxKkVxfQLrCz6Qy6yIrLw5-57KmTmuE6rqKztcj
|
|
|
389
389
|
synapse/tests/test_lib_types.py,sha256=4hC-NmKh_8oG-vrV7dxg62yN1sGrV7g3uV6P0VF2H38,78350
|
|
390
390
|
synapse/tests/test_lib_urlhelp.py,sha256=7H_IY0dNQPVV17iuL9KK7Q128A3_J4sRzJ573D5RpQc,3747
|
|
391
391
|
synapse/tests/test_lib_version.py,sha256=yDczjNi60hXXNZ-pYVntDblGNcekFZU6DdDsjUTkGtM,8164
|
|
392
|
-
synapse/tests/test_lib_view.py,sha256=
|
|
392
|
+
synapse/tests/test_lib_view.py,sha256=jljS79RvgD2owpPotIXvuG_9IwwmLt3t8g2MkbIsBco,41728
|
|
393
393
|
synapse/tests/test_lookup_iso3166.py,sha256=Xd2K0r0P5s-Towx_3qjDbJRd16Gr-ItMTIkYn0OU-Rk,375
|
|
394
394
|
synapse/tests/test_lookup_phonenum.py,sha256=t9lWLGtalmDYVH5C0JMC1E8QdtO4AGW4F8l4jekSJeE,290
|
|
395
395
|
synapse/tests/test_mindmeld.py,sha256=TiijGH7wX2zdXIFSBUlN40CPOvYaFlw6Wxi66XZuB_M,26
|
|
@@ -408,13 +408,13 @@ synapse/tests/test_model_geospace.py,sha256=8ATsx662mrcKzurMpQGbshnQPYOWqO7wxOWp
|
|
|
408
408
|
synapse/tests/test_model_gov_cn.py,sha256=FnfKNM_wnvmScLm4cYFSQXZ21kVaTPPDusiCD79awBA,675
|
|
409
409
|
synapse/tests/test_model_gov_intl.py,sha256=mHYK056C2R0aDH-5-TnUxtH0ZlKnEOoSd9ODIMasmow,780
|
|
410
410
|
synapse/tests/test_model_gov_us.py,sha256=kvZ9DudBrbKtZmqGm8X-b_IOw4oJ7XZMnvTgiDkzsrY,1525
|
|
411
|
-
synapse/tests/test_model_inet.py,sha256=
|
|
411
|
+
synapse/tests/test_model_inet.py,sha256=Q6z0mC0yr-F57BryaxcvKahwIFEd9ULVnefBO0bH-aM,159269
|
|
412
412
|
synapse/tests/test_model_infotech.py,sha256=utLzSeQc7ZOcC0HrXPkMh8pUmustP_Kb6u19EkUjHr8,114072
|
|
413
413
|
synapse/tests/test_model_language.py,sha256=49stF1B8_EwWJB67Xa5VXCG563Zfbr6S85iKN9Iom48,3046
|
|
414
414
|
synapse/tests/test_model_material.py,sha256=Hkd8BJh6FdQE0RuFMV2NO6fGqw9kOCb5AeIuTYtwCEM,2723
|
|
415
415
|
synapse/tests/test_model_math.py,sha256=x-rHBfm-59ueZdHXXzSi53eshldvVURoJeLeexWTL2U,826
|
|
416
416
|
synapse/tests/test_model_media.py,sha256=OhMb3OwmZ7hXfoQYGeUBlnsqIk0sAohSodCLML2_yVk,2655
|
|
417
|
-
synapse/tests/test_model_orgs.py,sha256=
|
|
417
|
+
synapse/tests/test_model_orgs.py,sha256=UKx0CBScjAir2R1L1Ev5MFNp1Wutc8Nv0D5xlafF2uw,47699
|
|
418
418
|
synapse/tests/test_model_person.py,sha256=CKfOtp7iCPAHQEfjlduDxPXLbFbi2LdVqExRyVwoxAc,19170
|
|
419
419
|
synapse/tests/test_model_planning.py,sha256=U2kkE0uBO6CqtTfy7wlnhEIu_NFdSri4I_I5b-mRjBE,5615
|
|
420
420
|
synapse/tests/test_model_proj.py,sha256=hCuM-CTyCAvqVPy7klP6NXOEtgJ61OyyT0x8mcJsjns,23238
|
|
@@ -442,7 +442,7 @@ synapse/tests/test_tools_csvtool.py,sha256=mZWZgHYD7S7eQ_SlBczS3UufuAgdOFE0ccq4I
|
|
|
442
442
|
synapse/tests/test_tools_docker_validate.py,sha256=iFkbJE98au96a3u9NTCukvebXfbh1WsacuuvtgVNLTU,3667
|
|
443
443
|
synapse/tests/test_tools_easycert.py,sha256=K3Sf8E5mDdL19uMFi55OYyzH_hvP3R3Z1XqCJlMxQLw,8854
|
|
444
444
|
synapse/tests/test_tools_feed.py,sha256=a-kR3UvaitKzMSH_cXQZnbbfz_39Evpf1SmOlj6Me4c,6082
|
|
445
|
-
synapse/tests/test_tools_genpkg.py,sha256=
|
|
445
|
+
synapse/tests/test_tools_genpkg.py,sha256=u68vdSzmzZDzniA_7uXOT_dsTyFWFp1SNvKE6pd8-4o,13183
|
|
446
446
|
synapse/tests/test_tools_guid.py,sha256=9NgdtIDMta9qwM8vsU5Gckv0llBibNXaEv0zpUrBPX8,314
|
|
447
447
|
synapse/tests/test_tools_healthcheck.py,sha256=VdOoDUG1XtsOH3jyV-2Z2DbEeWKs6o2rty5Gy67aCX4,3543
|
|
448
448
|
synapse/tests/test_tools_hiveload.py,sha256=d-2cCVNOFGpUcW2aO6gY_HcVgL9M0rTxlc8HfCkcZCI,3992
|
|
@@ -461,7 +461,7 @@ synapse/tests/test_tools_storm.py,sha256=xCDr3RumtBpFsxq0BhI0rRd6S83zoFI0oHeb6Vl
|
|
|
461
461
|
synapse/tests/test_utils.py,sha256=L77-3no2UIZcBFx9kI2j-uUidILGPNUpnLiytayB0ig,9948
|
|
462
462
|
synapse/tests/test_utils_getrefs.py,sha256=Cv0LT0DF-tCGwBmOXsYUVNIJdXQA73yRBgdSWxFL3oA,2623
|
|
463
463
|
synapse/tests/test_utils_stormcov.py,sha256=H9p1vFH8kNE6qMLrGzSV0eH7KOgdZFh7QuarFe47FtU,6149
|
|
464
|
-
synapse/tests/utils.py,sha256=
|
|
464
|
+
synapse/tests/utils.py,sha256=C7zqziOYwnX1samDcccDJZSaEg5L9_MjKLZ_MIrRy-o,78676
|
|
465
465
|
synapse/tests/files/TestUtilsGetrefs.test_basics.yaml,sha256=Ch8cEGFYfDUCZTEvzAqW5Ir79OnYb49pq4i9OJ7K9T0,8257
|
|
466
466
|
synapse/tests/files/__init__.py,sha256=G0DpSelVbC5S6PncHNL3QjgFvjCfaq7Kb1GgksJgEO4,1774
|
|
467
467
|
synapse/tests/files/cpedata.json,sha256=e_wajnxn4ZClQ3-hwlOxK-2MWzLQwrqgtWVUV5dUVF4,13799445
|
|
@@ -529,7 +529,7 @@ synapse/tests/files/stormpkg/workflows/testpkg-foo.yaml,sha256=zoN8HxrO1QNumYZJy
|
|
|
529
529
|
synapse/tests/files/testcore/cell.yaml,sha256=fBUjBfX1L-0nGQD-VhLMy_IjrDepI9zRzbmgsVFJSYY,46
|
|
530
530
|
synapse/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
531
531
|
synapse/tools/apikey.py,sha256=K9EbxMXGVU3oQ45vS_-CuMCUbdyTzsO4C1P7XIp4f6U,3624
|
|
532
|
-
synapse/tools/autodoc.py,sha256
|
|
532
|
+
synapse/tools/autodoc.py,sha256=pQoNrOIDim1p-lxqDfmE8211fLqQIXKaMp1qJtMiemg,35788
|
|
533
533
|
synapse/tools/axon2axon.py,sha256=lM3AOxKGdGwQ3XsEj-pyUjZ04s2rj0qSu6MlHCHhCWw,1872
|
|
534
534
|
synapse/tools/backup.py,sha256=Cz3OSaYMRND7gE55FdyjrBr3C1_qd68yJ23O4-mukCM,5969
|
|
535
535
|
synapse/tools/cellauth.py,sha256=-i6Fq2P9e-cXf69SWGnVc2TwGoW-vHED3D3oNEgTSog,12239
|
|
@@ -538,7 +538,7 @@ synapse/tools/cmdr.py,sha256=xnW_EAzQ7fnpWZ0SpNvthDBCcTn2ahMXxveBd4AuSd4,1789
|
|
|
538
538
|
synapse/tools/csvtool.py,sha256=mqCXRR2JLI4Xz9ScPR6sYkRAKfhTP2yWQFBWAk7vg24,7631
|
|
539
539
|
synapse/tools/easycert.py,sha256=naoYnWfg0m6NrBraKUVk3FK5OW53yVBZH8rv6RrXRH8,4531
|
|
540
540
|
synapse/tools/feed.py,sha256=ohqhWAPaLCTj7oVl1_Lom8xvYvExQnFs3EkuzEbQfgk,6063
|
|
541
|
-
synapse/tools/genpkg.py,sha256=
|
|
541
|
+
synapse/tools/genpkg.py,sha256=PjbCtkIEgjTr0HQPUBYMA5CsRfo5lBI9RN9k7E5wxNg,10511
|
|
542
542
|
synapse/tools/guid.py,sha256=UCBFqUSBdXt5WJYcoP0Vme_oOUXU040DZJEpay4uZHk,300
|
|
543
543
|
synapse/tools/healthcheck.py,sha256=KfZDyU-VPzUhg1F4VLl5o7qUbmwMG2Ubu4sWoXlD0wk,3532
|
|
544
544
|
synapse/tools/json2mpk.py,sha256=Q8RtWw4xav6WiCg5ty8ctTm-O1oDbsybFuXRacjrN28,1384
|
|
@@ -549,7 +549,7 @@ synapse/tools/promote.py,sha256=x_pB4PqFtDsn-oTZ637OMyijo0XuXTsOiOPXk-0H-Pc,1854
|
|
|
549
549
|
synapse/tools/pullfile.py,sha256=JdealCDQetOdgB_MuhnhZ2OeaaVqva3LsJKx6nLScT4,2259
|
|
550
550
|
synapse/tools/pushfile.py,sha256=D3r0zQsVzAGLqKoe-6LQuQkmAGiRzwwrgbMTFHnmK9o,4420
|
|
551
551
|
synapse/tools/reload.py,sha256=QayPeftB4JEyVEKKp5ijeveRx0DuGUuNzu8fTvZKR-o,2895
|
|
552
|
-
synapse/tools/rstorm.py,sha256=
|
|
552
|
+
synapse/tools/rstorm.py,sha256=AqW2qQ3bI5ZZCBVq2IZlpyAN-pn6gXurXDGXEtc-8RA,1275
|
|
553
553
|
synapse/tools/snapshot.py,sha256=ZoP-VRr9CAAorbGevrHObIx-FjwhjUiuMZw26b2Er2s,2372
|
|
554
554
|
synapse/tools/storm.py,sha256=i8Y13Ovhf9ksCrSLjpe6sPMODY50lMC03rni7PmMrAk,20967
|
|
555
555
|
synapse/tools/aha/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -619,8 +619,8 @@ synapse/vendor/xrpl/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
|
|
|
619
619
|
synapse/vendor/xrpl/tests/test_codec.py,sha256=Zwq6A5uZUK_FWDL3BA932c5b-rL3hnC6efobWHSLC4o,6651
|
|
620
620
|
synapse/vendor/xrpl/tests/test_main.py,sha256=kZQwWk7I6HrP-PMvLdsUUN4POvWD9I-iXDHOwdeF090,4299
|
|
621
621
|
synapse/vendor/xrpl/tests/test_main_test_cases.py,sha256=vTlUM4hJD2Hd2wCIdd9rfsvcMZZZQmNHWdCTTFeGz2Y,4221
|
|
622
|
-
synapse-2.
|
|
623
|
-
synapse-2.
|
|
624
|
-
synapse-2.
|
|
625
|
-
synapse-2.
|
|
626
|
-
synapse-2.
|
|
622
|
+
synapse-2.212.0.dist-info/licenses/LICENSE,sha256=xllut76FgcGL5zbIRvuRc7aezPbvlMUTWJPsVr2Sugg,11358
|
|
623
|
+
synapse-2.212.0.dist-info/METADATA,sha256=uu4iQLjVHqvjrVyCxz7C-OP7Y6Ruh4G-KHxKxYh9xcg,4623
|
|
624
|
+
synapse-2.212.0.dist-info/WHEEL,sha256=cRWFNt_CJSuf6BnJKAdKunDXUJxjAbWvbt_kstDCs1I,93
|
|
625
|
+
synapse-2.212.0.dist-info/top_level.txt,sha256=v_1YsqjmoSCzCKs7oIhzTNmWtSYoORiBMv1TJkOhx8A,8
|
|
626
|
+
synapse-2.212.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|